From 71575905cb0301e14c68d61bc534aa205ebb794c Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 17 Jul 2024 21:42:46 +1000 Subject: [PATCH] Remove behave and bimtester module - only used by advanced users and confuses users with ifctester --- src/blenderbim/Makefile | 54 +--- src/blenderbim/blenderbim/bim/__init__.py | 1 - .../bim/module/bimtester/__init__.py | 42 ---- .../bim/module/bimtester/operator.py | 238 ------------------ .../blenderbim/bim/module/bimtester/prop.py | 71 ------ .../blenderbim/bim/module/bimtester/ui.py | 81 ------ 6 files changed, 1 insertion(+), 486 deletions(-) delete mode 100644 src/blenderbim/blenderbim/bim/module/bimtester/__init__.py delete mode 100644 src/blenderbim/blenderbim/bim/module/bimtester/operator.py delete mode 100644 src/blenderbim/blenderbim/bim/module/bimtester/prop.py delete mode 100644 src/blenderbim/blenderbim/bim/module/bimtester/ui.py diff --git a/src/blenderbim/Makefile b/src/blenderbim/Makefile index 56b6069014..6989676c67 100644 --- a/src/blenderbim/Makefile +++ b/src/blenderbim/Makefile @@ -102,60 +102,36 @@ endif # Provides IfcOpenShell Python functionality cd ../ifcopenshell-python && make dist PLATFORM=$(PLATFORM)64 PYVERSION=$(PYVERSION) && cp dist/*.whl ../blenderbim/dist/blenderbim/wheels/ - # cd dist/working && wget https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-$(PYNUMBER)-v0.7.9-${OLD}-$(PLATFORM)64.zip - # cd dist/working && unzip ifcopenshell-python* - # cp -r dist/working/ifcopenshell dist/blenderbim/libs/site/packages/ rm -rf dist/working # Provides dependencies that are part of IfcOpenShell mkdir dist/working - # cd dist/working && wget https://github.com/IfcOpenShell/IfcOpenShell/archive/refs/heads/v0.8.0.zip - # cd dist/working && unzip v0.8.0.zip - # IfcOpenBot sometimes lags behind, so we only use its binaries - # mv dist/blenderbim/libs/site/packages/ifcopenshell/*ifcopenshell_wrapper* dist/working/ - # rm -rf dist/blenderbim/libs/site/packages/ifcopenshell - # cp -r dist/working/IfcOpenShell-0.8.0/src/ifcopenshell-python/ifcopenshell dist/blenderbim/libs/site/packages/ - # mv dist/working/*ifcopenshell_wrapper* dist/blenderbim/libs/site/packages/ifcopenshell/ # Provides bcf functionality cd ../bcf && make dist && cp dist/*.whl ../blenderbim/dist/blenderbim/wheels/ - # cp -r dist/working/IfcOpenShell-0.8.0/src/bcf/src/bcf dist/blenderbim/libs/site/packages/ # Provides IFCClash functionality cd ../ifcclash && make dist && cp dist/*.whl ../blenderbim/dist/blenderbim/wheels/ - # cp -r dist/working/IfcOpenShell-0.8.0/src/ifcclash/ifcclash dist/blenderbim/libs/site/packages/ # Provides BIMTester functionality cd ../ifcbimtester && make dist && cp dist/*.whl ../blenderbim/dist/blenderbim/wheels/ # Provides IFCTester functionality cd ../ifctester && make dist && cp dist/*.whl ../blenderbim/dist/blenderbim/wheels/ - # cp -r dist/working/IfcOpenShell-0.8.0/src/ifctester/ifctester dist/blenderbim/libs/site/packages/ # Provides IFCFM functionality cd ../ifcfm && make dist && cp dist/*.whl ../blenderbim/dist/blenderbim/wheels/ - # cp -r dist/working/IfcOpenShell-0.8.0/src/ifcfm/ifcfm dist/blenderbim/libs/site/packages/ # Provides bSDD functionality cd ../bsdd && make dist && cp dist/*.whl ../blenderbim/dist/blenderbim/wheels/ - # cp -r dist/working/IfcOpenShell-0.8.0/src/bsdd/* dist/blenderbim/libs/site/packages/ # Provides IFCDiff functionality cd ../ifcdiff && make dist && cp dist/*.whl ../blenderbim/dist/blenderbim/wheels/ - # cp -r dist/working/IfcOpenShell-0.8.0/src/ifcdiff/* dist/blenderbim/libs/site/packages/ # Provides IFCCSV functionality cd ../ifccsv && make dist && cp dist/*.whl ../blenderbim/dist/blenderbim/wheels/ - # cp -r dist/working/IfcOpenShell-0.8.0/src/ifccsv/* dist/blenderbim/libs/site/packages/ # Provides IFCPatch functionality cd ../ifcpatch && make dist && cp dist/*.whl ../blenderbim/dist/blenderbim/wheels/ - # cp -r dist/working/IfcOpenShell-0.8.0/src/ifcpatch/ifcpatch dist/blenderbim/libs/site/packages/ # Provides IFC4D functionality cd ../ifc4d && make dist && cp dist/*.whl ../blenderbim/dist/blenderbim/wheels/ - # cp -r dist/working/IfcOpenShell-0.8.0/src/ifc4d/ifc4d dist/blenderbim/libs/site/packages/ # Provides IFC5D functionality cd ../ifc5d && make dist && cp dist/*.whl ../blenderbim/dist/blenderbim/wheels/ - # cp -r dist/working/IfcOpenShell-0.8.0/src/ifc5d/ifc5d dist/blenderbim/libs/site/packages/ # Provides IFCCityJSON functionality cd ../ifccityjson && make dist && cp dist/*.whl ../blenderbim/dist/blenderbim/wheels/ - # cp -r dist/working/IfcOpenShell-0.8.0/src/ifccityjson dist/blenderbim/libs/site/packages/ # Provides IfcGit functionality cd dist/working && . env/bin/activate && $(PIP) download GitPython --dest=../blenderbim/wheels - # cp -r dist/working/site-packages/smmap dist/blenderbim/libs/site/packages/ - # cp -r dist/working/site-packages/gitdb dist/blenderbim/libs/site/packages/ - # cp -r dist/working/site-packages/git dist/blenderbim/libs/site/packages/ rm -rf dist/working # Provides audio playback for costing @@ -184,8 +160,6 @@ endif cd dist/working && . env/bin/activate && $(PIP) download openpyxl --dest=../blenderbim/wheels # odfpy doesn't come with its own wheel, so whee'l (get it?) create it ourselves! cd dist/working && . env/bin/activate && $(PIP) wheel odfpy --wheel-dir=./ - cd dist/working && tar -xzvf odfpy* && cd odfpy* && python -m build && cp dist/*.whl ../blenderbim/wheels - # pip wheel odfpy --wheel-dir=. # Required by IFCCityJSON cd dist/working && . env/bin/activate && $(PIP) download cjio --dest=../blenderbim/wheels # Provides express rule validation for ifcopenshell.validate @@ -225,8 +199,7 @@ endif cd dist/working && . env/bin/activate && $(PIP) download python-socketio[asyncio_client] --dest=../blenderbim/wheels cd dist/working && . env/bin/activate && $(PIP) download aiohttp --dest=../blenderbim/wheels # Required by light module - # cd dist/working && . env/bin/activate && $(PIP) download pytz --dest=../blenderbim/wheels - cd dist/working && . env/bin/activate && $(PIP) download pytz --dest ../blenderbim/wheels + cd dist/working && . env/bin/activate && $(PIP) download pytz --dest=../blenderbim/wheels cd dist/working && . env/bin/activate && $(PIP) download tzfpy $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=../blenderbim/wheels # pyradiance is using different platform versions than defaults in our makefile. ifeq ($(PLATFORM), linux) @@ -236,29 +209,6 @@ else ifeq ($(PLATFORM), macos) else cd dist/working && . env/bin/activate && $(PIP) download pyradiance $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=../blenderbim/wheels endif - - # cp -r dist/working/site-packages/* dist/blenderbim/libs/site/packages/ - rm -rf dist/working - - # Required by BIMTester - mkdir dist/working - cd dist/working && wget https://files.pythonhosted.org/packages/c8/4b/d0a8c23b6c8985e5544ea96d27105a273ea22051317f850c2cdbf2029fe4/behave-1.2.6.tar.gz - cd dist/working && tar -xzvf behave* - cd dist/working/behave-1.2.6/ && cp -r behave ../../blenderbim/libs/site/packages/ - # See bug #1294 - cd dist/working/ && wget https://raw.githubusercontent.com/IfcOpenShell/IfcOpenShell/v0.8.0/src/ifcbimtester/patch/model_core.patch - cd dist/working/ && wget https://raw.githubusercontent.com/IfcOpenShell/IfcOpenShell/v0.8.0/src/ifcbimtester/patch/runner_util.patch - cd dist/working/ && $(PATCH) ../blenderbim/libs/site/packages/behave/model_core.py < model_core.patch - cd dist/working/ && $(PATCH) ../blenderbim/libs/site/packages/behave/runner_util.py < runner_util.patch - # See bug #2159 - cd dist/working/ && wget https://raw.githubusercontent.com/IfcOpenShell/IfcOpenShell/v0.8.0/src/ifcbimtester/patch/junit.patch - cd dist/working/ && $(PATCH) ../blenderbim/libs/site/packages/behave/reporter/junit.py < junit.patch - rm -rf dist/working - - # Required by behave - mkdir dist/working - cd dist/working && . env/bin/activate && $(PIP) download parse --dest=../blenderbim/wheels - cd dist/working && . env/bin/activate && $(PIP) download parse-type --dest=../blenderbim/wheels rm -rf dist/working # Provides IFCJSON functionality @@ -303,8 +253,6 @@ endif # Remove dependencies also bundled with Blender rm -rf dist/blenderbim/wheels/numpy* - # rm -rf dist/blenderbim/libs/site/packages/numpy - # rm -rf dist/blenderbim/libs/site/packages/numpy.libs ifeq ($(IS_STABLE), TRUE) cd dist/blenderbim && $(SED) "s/0, 0, 0/$(VERSION_MAJOR), $(VERSION_MINOR), $(VERSION_PATCH)/" __init__.py diff --git a/src/blenderbim/blenderbim/bim/__init__.py b/src/blenderbim/blenderbim/bim/__init__.py index 1924acec46..c8eea106dd 100644 --- a/src/blenderbim/blenderbim/bim/__init__.py +++ b/src/blenderbim/blenderbim/bim/__init__.py @@ -75,7 +75,6 @@ modules = { "clash": None, "csv": None, "tester": None, - "bimtester": None, "diff": None, "patch": None, "gis": None, diff --git a/src/blenderbim/blenderbim/bim/module/bimtester/__init__.py b/src/blenderbim/blenderbim/bim/module/bimtester/__init__.py deleted file mode 100644 index 0018a98abe..0000000000 --- a/src/blenderbim/blenderbim/bim/module/bimtester/__init__.py +++ /dev/null @@ -1,42 +0,0 @@ -# BlenderBIM Add-on - OpenBIM Blender Add-on -# Copyright (C) 2020, 2021 Dion Moult -# -# This file is part of BlenderBIM Add-on. -# -# BlenderBIM Add-on 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. -# -# BlenderBIM Add-on 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 BlenderBIM Add-on. If not, see . - -import bpy -from . import ui, prop, operator - -classes = ( - operator.ExecuteBIMTester, - operator.BIMTesterPurge, - operator.SelectFeature, - operator.SelectSteps, - operator.SelectBIMTesterIfcFile, - operator.RejectElement, - operator.ApproveClass, - operator.RejectClass, - operator.SelectAudited, - prop.BimTesterProperties, - ui.BIM_PT_qa, -) - - -def register(): - bpy.types.Scene.BimTesterProperties = bpy.props.PointerProperty(type=prop.BimTesterProperties) - - -def unregister(): - del bpy.types.Scene.BimTesterProperties diff --git a/src/blenderbim/blenderbim/bim/module/bimtester/operator.py b/src/blenderbim/blenderbim/bim/module/bimtester/operator.py deleted file mode 100644 index 10dc74f20c..0000000000 --- a/src/blenderbim/blenderbim/bim/module/bimtester/operator.py +++ /dev/null @@ -1,238 +0,0 @@ -# BlenderBIM Add-on - OpenBIM Blender Add-on -# Copyright (C) 2020, 2021 Dion Moult -# -# This file is part of BlenderBIM Add-on. -# -# BlenderBIM Add-on 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. -# -# BlenderBIM Add-on 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 BlenderBIM Add-on. If not, see . - -import os -import bpy -import tempfile -import webbrowser - -try: - import bimtester - import bimtester.run - import bimtester.reports -except: - print("Failed to load BIMTester. Try disabling other add-ons, in particular Blender-OSM. See bug #1318.") - -from pathlib import Path -from blenderbim.bim.ifc import IfcStore - - -class ExecuteBIMTester(bpy.types.Operator): - bl_idname = "bim.execute_bim_tester" - bl_label = "Execute BIMTester" - - @classmethod - def poll(cls, context): - props = context.scene.BimTesterProperties - return (props.ifc_file or props.should_load_from_memory) and props.feature - - def execute(self, context): - props = context.scene.BimTesterProperties - - with tempfile.TemporaryDirectory() as dirpath: - report = os.path.join(dirpath, "{}.html".format(props.feature)) - args = { - "action": "run", - "advanced_arguments": "", - "console": False, - "feature": props.feature, - "ifc": props.ifc_file, - "path": "", - "report": report, - "schema_file": "", - "schema_name": "", - "lang": "en", - "steps": props.steps, - } - use_stored_ifc = props.should_load_from_memory and IfcStore.get_file() - runner = bimtester.run.TestRunner(args["ifc"], ifc=IfcStore.get_file() if use_stored_ifc else None) - report_json = runner.run(args) - bimtester.reports.ReportGenerator().generate(report_json, args["report"]) - webbrowser.open("file://" + report) - return {"FINISHED"} - - -class BIMTesterPurge(bpy.types.Operator): - bl_idname = "bim.bim_tester_purge" - bl_label = "Purge Tests" - - def execute(self, context): - cwd = os.getcwd() - os.chdir(context.scene.BimTesterProperties.features_dir) - bimtester.clean.TestPurger().purge() - os.chdir(cwd) - return {"FINISHED"} - - -class SelectFeature(bpy.types.Operator): - bl_idname = "bim.select_feature" - bl_label = "Select Feature / IDS" - bl_options = {"REGISTER", "UNDO"} - filename_ext = ".feature" - filter_glob: bpy.props.StringProperty(default="*.feature;*.xml", options={"HIDDEN"}) - filepath: bpy.props.StringProperty(subtype="FILE_PATH") - - def execute(self, context): - context.scene.BimTesterProperties.feature = self.filepath - return {"FINISHED"} - - def invoke(self, context, event): - context.window_manager.fileselect_add(self) - return {"RUNNING_MODAL"} - - -class SelectSteps(bpy.types.Operator): - bl_idname = "bim.select_steps" - bl_label = "Select Steps" - bl_options = {"REGISTER", "UNDO"} - filename_ext = ".py" - filter_glob: bpy.props.StringProperty(default="*.py", options={"HIDDEN"}) - filepath: bpy.props.StringProperty(subtype="FILE_PATH") - - def execute(self, context): - context.scene.BimTesterProperties.steps = self.filepath - return {"FINISHED"} - - def invoke(self, context, event): - context.window_manager.fileselect_add(self) - return {"RUNNING_MODAL"} - - -class SelectBIMTesterIfcFile(bpy.types.Operator): - bl_idname = "bim.select_bimtester_ifc_file" - bl_label = "Select BIMTester IFC File" - bl_options = {"REGISTER", "UNDO"} - filename_ext = ".ifc" - filter_glob: bpy.props.StringProperty(default="*.ifc;*.ifczip;*.ifcxml", options={"HIDDEN"}) - filepath: bpy.props.StringProperty(subtype="FILE_PATH") - - def execute(self, context): - context.scene.BimTesterProperties.ifc_file = self.filepath - return {"FINISHED"} - - def invoke(self, context, event): - context.window_manager.fileselect_add(self) - return {"RUNNING_MODAL"} - - -class RejectElement(bpy.types.Operator): - bl_idname = "bim.reject_element" - bl_label = "Reject Element" - - def execute(self, context): - lines = [] - self.file = IfcStore.get_file() - for obj in context.selected_objects: - lines.append( - " * The element {} should not exist because {}".format( - self.file.by_id(obj.BIMObjectProperties.ifc_definition_id).GlobalId, - context.scene.BimTesterProperties.qa_reject_element_reason, - ) - ) - QAHelper.append_to_scenario(lines, context) - return {"FINISHED"} - - -class ApproveClass(bpy.types.Operator): - bl_idname = "bim.approve_class" - bl_label = "Approve Class" - - def execute(self, context): - lines = [] - self.file = IfcStore.get_file() - for obj in context.selected_objects: - if not obj.BIMObjectProperties.ifc_definition_id: - continue - element = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id) - lines.append(" * The element {} is an {}".format(element.GlobalId, element.is_a())) - QAHelper.append_to_scenario(lines, context) - return {"FINISHED"} - - -class RejectClass(bpy.types.Operator): - bl_idname = "bim.reject_class" - bl_label = "Reject Class" - - def execute(self, context): - lines = [] - self.file = IfcStore.get_file() - for obj in context.selected_objects: - if not obj.BIMObjectProperties.ifc_definition_id: - continue - lines.append( - " * The element {} is an {}".format( - self.file.by_id(obj.BIMObjectProperties.ifc_definition_id).GlobalId, - context.scene.BimTesterProperties.audit_ifc_class, - ) - ) - QAHelper.append_to_scenario(lines, context) - return {"FINISHED"} - - -class SelectAudited(bpy.types.Operator): - bl_idname = "bim.select_audited" - bl_label = "Select Audited" - bl_options = {"REGISTER", "UNDO"} - - def execute(self, context): - audited_global_ids = [] - self.file = IfcStore.get_file() - for filename in Path(context.scene.BimTesterProperties.features_dir).glob("*.feature"): - with open(filename, "r") as feature_file: - lines = feature_file.readlines() - for line in lines: - words = line.strip().split() - for word in words: - if self.is_a_global_id(word): - audited_global_ids.append(word) - for obj in context.visible_objects: - if not obj.BIMObjectProperties.ifc_definition_id: - continue - if self.file.by_id(obj.BIMObjectProperties.ifc_definition_id).GlobalId in audited_global_ids: - obj.select_set(True) - return {"FINISHED"} - - def is_a_global_id(self, word): - return word[0] in ["0", "1", "2", "3"] and len(word) == 22 - - -class QAHelper: - @classmethod - def append_to_scenario(cls, lines, context): - filename = os.path.join( - context.scene.BimTesterProperties.features_dir, - context.scene.BimTesterProperties.features_file + ".feature", - ) - if os.path.exists(filename + "~"): - os.remove(filename + "~") - os.rename(filename, filename + "~") - with open(filename, "w") as destination: - with open(filename + "~", "r") as source: - is_in_scenario = False - for source_line in source: - if ( - "Scenario: " in source_line - and context.scene.BimTesterProperties.scenario == source_line.strip()[len("Scenario: ") :] - ): - is_in_scenario = True - elif is_in_scenario: - for line in lines: - destination.write(line + "\n") - is_in_scenario = False - destination.write(source_line) - os.remove(filename + "~") diff --git a/src/blenderbim/blenderbim/bim/module/bimtester/prop.py b/src/blenderbim/blenderbim/bim/module/bimtester/prop.py deleted file mode 100644 index 2a497c2a44..0000000000 --- a/src/blenderbim/blenderbim/bim/module/bimtester/prop.py +++ /dev/null @@ -1,71 +0,0 @@ -# BlenderBIM Add-on - OpenBIM Blender Add-on -# Copyright (C) 2020, 2021 Dion Moult -# -# This file is part of BlenderBIM Add-on. -# -# BlenderBIM Add-on 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. -# -# BlenderBIM Add-on 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 BlenderBIM Add-on. If not, see . - -import os -from pathlib import Path -from blenderbim.bim.prop import StrProperty -from blenderbim.bim.module.root.prop import get_ifc_classes -from bpy.types import PropertyGroup -from bpy.props import ( - PointerProperty, - StringProperty, - EnumProperty, - BoolProperty, - IntProperty, - FloatProperty, - FloatVectorProperty, - CollectionProperty, -) - -scenarios_enum = [] - - -def purge(): - global scenarios_enum - scenarios_enum = [] - - -def getScenarios(self, context): - global scenarios_enum - if len(scenarios_enum) < 1: - scenarios_enum.clear() - - if context.scene.BimTesterProperties.feature != "": - with open(context.scene.BimTesterProperties.feature, "r") as feature_file: - lines = feature_file.readlines() - for line in lines: - if "Scenario:" in line: - s = line.strip()[len("Scenario: ") :] - scenarios_enum.append((s, s, "")) - return scenarios_enum - - -def refreshScenarios(self, context): - global scenarios_enum - scenarios_enum.clear() - getScenarios(self, context) - - -class BimTesterProperties(PropertyGroup): - feature: StringProperty(default="", name="Feature", update=refreshScenarios) - steps: StringProperty(default="", name="Custom Steps") - ifc_file: StringProperty(default="", name="IFC File") - audit_ifc_class: EnumProperty(items=get_ifc_classes, name="Audit Class") - qa_reject_element_reason: StringProperty(name="Element Rejection Reason") - scenario: EnumProperty(items=getScenarios, name="Scenario") - should_load_from_memory: BoolProperty(default=False, name="Load from Memory") diff --git a/src/blenderbim/blenderbim/bim/module/bimtester/ui.py b/src/blenderbim/blenderbim/bim/module/bimtester/ui.py deleted file mode 100644 index 5c0843d618..0000000000 --- a/src/blenderbim/blenderbim/bim/module/bimtester/ui.py +++ /dev/null @@ -1,81 +0,0 @@ -# BlenderBIM Add-on - OpenBIM Blender Add-on -# Copyright (C) 2020, 2021 Dion Moult -# -# This file is part of BlenderBIM Add-on. -# -# BlenderBIM Add-on 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. -# -# BlenderBIM Add-on 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 BlenderBIM Add-on. If not, see . - -from bpy.types import Panel -from blenderbim.bim.ifc import IfcStore - - -class BIM_PT_qa(Panel): - bl_label = "BIMTester" - bl_idname = "BIM_PT_qa" - bl_options = {"DEFAULT_CLOSED"} - bl_space_type = "PROPERTIES" - bl_region_type = "WINDOW" - bl_context = "scene" - bl_parent_id = "BIM_PT_tab_quality_control" - - def draw(self, context): - self.layout.use_property_split = True - - props = context.scene.BimTesterProperties - - if IfcStore.get_file(): - row = self.layout.row() - row.prop(props, "should_load_from_memory") - - if not IfcStore.get_file() or not props.should_load_from_memory: - row = self.layout.row(align=True) - row.prop(props, "ifc_file") - row.operator("bim.select_bimtester_ifc_file", icon="FILE_FOLDER", text="") - - row = self.layout.row(align=True) - row.prop(props, "feature") - row.operator("bim.select_feature", icon="FILE_FOLDER", text="") - - row = self.layout.row(align=True) - row.prop(props, "steps") - row.operator("bim.select_steps", icon="FILE_FOLDER", text="") - - has_ifc_file = (IfcStore.get_file() and props.should_load_from_memory) or ( - props.ifc_file and not props.should_load_from_memory - ) - - row = self.layout.row(align=True) - row.operator("bim.execute_bim_tester") - row.operator("bim.bim_tester_purge") - - if props.feature and has_ifc_file: - self.layout.label(text="Scenario Authoring:") - - row = self.layout.row(align=True) - row.prop(props, "scenario") - - row = self.layout.row() - row.prop(props, "qa_reject_element_reason") - row = self.layout.row() - row.operator("bim.reject_element") - - row = self.layout.row() - row.prop(props, "audit_ifc_class") - - row = self.layout.row(align=True) - row.operator("bim.approve_class") - row.operator("bim.reject_class") - - row = self.layout.row() - row.operator("bim.select_audited")