diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 8ba9fe7703..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -**Error Description and Steps to Reproduce** - - - -**Attachments** - - - -**Debug information** - - diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000000..c1edda1887 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,23 @@ +name: Bug Report +description: Crashes, error messages, and broken features +type: bug +body: +- type: textarea + attributes: + label: Bug Description + placeholder: | + Describe what problem occurred and what you expected to happen instead. + + 1. To reproduce this, open file '...' + 2. Click on '....' + 3. See error +- type: textarea + attributes: + label: Attachments + description: "Private files can be uploaded to https://ifcopenshell.org/upload.html - only viewed by core developers and will be deleted afterwards. Please submit your report first then upload private files afterwards." + placeholder: "If applicable, add screenshots to help explain your problem. Please also drag-drop any files necessary to show the error (rename the file extension from .ifc to .txt to upload)." +- type: textarea + attributes: + label: Debug and Error Output + description: "If this is in Bonsai, paste the output from the Copy Debug Information option in Bonsai. It can be found under Quality and Coordination -> Quality Control -> Debug. If this is a general software issue, if relevant include details about IfcOpenShell version, operating system, Python version, etc." + render: yes diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..0cd88cb2e9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Community Forums + url: https://community.osarch.org/ + about: Have a question? Want to discuss an idea? Try the OSArch forums instead. + - name: Live Chat + url: https://osarch.org/chat + about: Have a really confusing issue? Want real-time support? diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 18044de82c..0000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' - ---- - - -**Feature Description** - - diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000000..0c92ed6ba2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,8 @@ +name: Feature Request +description: Suggest a new feature or improvement +type: Feature +body: +- type: textarea + attributes: + label: Feature Description + placeholder: "Describe a feature you'd like us to add, or a change to the user interface, design, or workflow for usability. If it's not obvious, explain why this feature is awesome. Note that feature requests must be specific and measurable." diff --git a/.github/workflows/build_osx.yml b/.github/workflows/build_osx.yml index 4b968c8516..0ada497388 100644 --- a/.github/workflows/build_osx.yml +++ b/.github/workflows/build_osx.yml @@ -44,7 +44,11 @@ jobs: brew update brew install git bison autoconf automake libffi cmake findutils echo "$(brew --prefix findutils)/libexec/gnubin" >> $GITHUB_PATH - + + - name: Install aws cli + run: | + python -m pip install awscli + - name: Unpack Dependencies run: | install_root=$(find ./build -maxdepth 4 -name install) @@ -117,20 +121,6 @@ jobs: aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }} aws-region: us-east-1 - - name: Overwrite aws cli - run: | - # Error: The `brew link` step did not complete successfully - # The formula built, but is not symlinked into /usr/local - # Could not symlink bin/idle3 - # Target /usr/local/bin/idle3 - # already exists. You may want to remove it: - # rm '/usr/local/bin/idle3' - # - # To force the link and overwrite all conflicting files: - # brew link --overwrite python@3.13 - # https://github.com/rust-lang/rustup/pull/3989/files - brew install --overwrite awscli | true - - name: Upload .zip archives to S3 run: | aws s3 cp ~/output s3://ifcopenshell-builds/ --recursive diff --git a/.github/workflows/build_pyodide.yml b/.github/workflows/build_pyodide.yml index be8a73666e..14bb047333 100644 --- a/.github/workflows/build_pyodide.yml +++ b/.github/workflows/build_pyodide.yml @@ -19,7 +19,7 @@ jobs: with: submodules: recursive repository: pyodide/pyodide - ref: '0.26.4' + ref: '0.28.0a3' token: ${{ secrets.BUILD_REPO_TOKEN }} path: pyodide @@ -29,18 +29,18 @@ jobs: sed -i s/0.8.0/$VERSION/g IfcOpenShell/pyodide/meta.yaml sed -i s/0.8.0/$VERSION/g IfcOpenShell/pyodide/setup.py echo '#!/usr/bin/bash' > script.sh - echo 'cd pyodide' > script.sh - echo 'make && pip install ./pyodide-build' >> script.sh + echo 'cd pyodide' >> script.sh + echo 'make' >> script.sh echo 'cd ..' >> script.sh echo 'mkdir -p packages/ifcopenshell' >> script.sh echo 'cp IfcOpenShell/pyodide/meta.yaml packages/ifcopenshell' >> script.sh echo 'PYODIDE_ROOT=/src/pyodide \' >> script.sh - echo 'PATH=/src/pyodide/emsdk/emsdk:/src/pyodide/emsdk/emsdk/node/20.18.0_64bit/bin:/src/pyodide/emsdk/emsdk/upstream/emscripten:$PATH \' >> script.sh + echo 'PATH=/src/pyodide/emsdk/emsdk:/src/pyodide/emsdk/emsdk/node/22.16.0_64bit/bin:/src/pyodide/emsdk/emsdk/upstream/emscripten:$PATH \' >> script.sh echo 'pyodide build-recipes ifcopenshell --install' >> script.sh chmod +x script.sh sed -i s/--tty// pyodide/run_docker pyodide/run_docker ./script.sh - mv dist/ifcopenshell-$VERSION-py3-none-any.whl dist/ifcopenshell-$VERSION+${GITHUB_SHA:0:7}-cp312-cp312-emscripten_3_1_58_wasm32.whl + mv dist/ifcopenshell-$VERSION-py3-none-any.whl dist/ifcopenshell-$VERSION+${GITHUB_SHA:0:7}-cp313-cp313-emscripten_4_0_9_wasm32.whl - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 diff --git a/.github/workflows/build_rocky.yml b/.github/workflows/build_rocky.yml index 45732124dc..4b88f7e90b 100644 --- a/.github/workflows/build_rocky.yml +++ b/.github/workflows/build_rocky.yml @@ -16,7 +16,8 @@ jobs: bzip2 patch mesa-libGL-devel libffi-devel fontconfig-devel \ sqlite-devel bzip2-devel zlib-devel openssl-devel xz-devel \ readline-devel ncurses-devel libffi-devel libuuid-devel git-lfs \ - findutils + findutils xz + python3 -m pip install typing_extensions git config --global --add safe.directory '*' - name: Install aws cli diff --git a/.github/workflows/build_rocky_arm.yml b/.github/workflows/build_rocky_arm.yml index 64c22a3331..aa6c689ff9 100644 --- a/.github/workflows/build_rocky_arm.yml +++ b/.github/workflows/build_rocky_arm.yml @@ -16,7 +16,8 @@ jobs: bzip2 patch mesa-libGL-devel libffi-devel fontconfig-devel \ sqlite-devel bzip2-devel zlib-devel openssl-devel xz-devel \ readline-devel ncurses-devel libffi-devel libuuid-devel git-lfs \ - findutils + findutils xz + python3 -m pip install typing_extensions git config --global --add safe.directory '*' - name: Install aws cli diff --git a/.github/workflows/build_win.yml b/.github/workflows/build_win.yml index f4094f7c45..5767d006f1 100644 --- a/.github/workflows/build_win.yml +++ b/.github/workflows/build_win.yml @@ -5,7 +5,7 @@ on: jobs: build_ifcopenshell: - runs-on: windows-2019 + runs-on: windows-2022 strategy: fail-fast: false matrix: @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v3 with: repository: IfcOpenShell/build-outputs - path: _deps-vs2019-x64-installed + path: _deps-vs2022-x64-installed ref: windows-${{ matrix.arch }} lfs: true token: ${{ secrets.BUILD_REPO_TOKEN }} @@ -40,7 +40,7 @@ jobs: - name: Unpack Dependencies run: | - cd _deps-vs2019-x64-installed + cd _deps-vs2022-x64-installed Get-ChildItem -Path . -Filter 'cache-*.zip' | ForEach-Object { 7z x $_.FullName } @@ -53,17 +53,17 @@ jobs: for /f "tokens=1,2,3 delims=." %%a in ("%PYTHON_VERSION%") do ( set PY_VER_MAJOR_MINOR=%%a%%b ) - call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat" + call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" SET IFCOS_INSTALL_PYTHON=FALSE cd win - echo y | call build-deps.cmd vs2019-x64 Release + echo y | call build-deps.cmd vs2022-x64 Release SET PYTHONHOME=C:\Python\${{ matrix.python }} - call run-cmake.bat vs2019-x64 -DENABLE_BUILD_OPTIMIZATIONS=On -DGLTF_SUPPORT=ON -DADD_COMMIT_SHA=ON -DVERSION_OVERRIDE=ON - call install-ifcopenshell.bat vs2019-x64 Release + call run-cmake.bat vs2022-x64 -DENABLE_BUILD_OPTIMIZATIONS=On -DGLTF_SUPPORT=ON -DADD_COMMIT_SHA=ON -DVERSION_OVERRIDE=ON + call install-ifcopenshell.bat vs2022-x64 Release - name: Pack Dependencies run: | - cd _deps-vs2019-x64-installed + cd _deps-vs2022-x64-installed Get-ChildItem -Path . -Directory | ForEach-Object { $cacheFile = "cache-$($_.Name).zip" echo $cacheFile @@ -74,7 +74,7 @@ jobs: - name: Commit and Push Changes to Build Repository run: | - cd _deps-vs2019-x64-installed + cd _deps-vs2022-x64-installed git config user.name "IfcOpenBot" git config user.email "ifcopenbot@ifcopenshell.org" git add *.zip @@ -90,7 +90,7 @@ jobs: if ("${{ matrix.python }}" -eq "3.9.11") { # only for the first python version the executables are assembled for upload - cd _installed-vs2019-x64/bin + cd _installed-vs2022-x64/bin Get-ChildItem -Path . | ForEach-Object { echo $_ $exe = $_.Name @@ -118,5 +118,13 @@ jobs: aws-region: us-east-1 - name: Upload .zip Archives to S3 + env: + AWS_DEBUG: 1 + AWS_RETRY_MODE: standard + AWS_MAX_ATTEMPTS: 3 run: | - aws s3 cp $env:USERPROFILE\output s3://ifcopenshell-builds/ --recursive + dir "$env:USERPROFILE\output" + foreach ($zip in Get-ChildItem -Path "$env:USERPROFILE\output" -Filter *.zip) { + aws s3 cp "$($zip.FullName)" s3://ifcopenshell-builds/ --debug + Start-Sleep -Seconds 5 + } diff --git a/.github/workflows/ci-bcf-pypi.yml b/.github/workflows/ci-bcf-pypi.yml index 75034acc2f..011babfe2b 100644 --- a/.github/workflows/ci-bcf-pypi.yml +++ b/.github/workflows/ci-bcf-pypi.yml @@ -34,7 +34,7 @@ jobs: cd src/bcf && make dist IS_STABLE=TRUE - name: Publish a Python distribution to PyPI - uses: ortega2247/pypi-upload-action@master + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/ci-black-formatting.yaml b/.github/workflows/ci-black-formatting.yaml index b1d3295c1b..e0531f6f5b 100644 --- a/.github/workflows/ci-black-formatting.yaml +++ b/.github/workflows/ci-black-formatting.yaml @@ -4,9 +4,6 @@ on: push: pull_request: -env: - PYTHON_VERSION: "3.12" - jobs: lint-formatting: runs-on: ubuntu-latest @@ -17,57 +14,51 @@ jobs: - name: Action - install python uses: actions/setup-python@v5.3.0 with: - python-version: "${{ env.PYTHON_VERSION }}" + python-version: "3.9" - - name: Step 1 - install dependencies - shell: bash + - name: Action - install python + uses: actions/setup-python@v5.3.0 + with: + python-version: "3.11" + + - name: Install dependencies run: | - python3 -m pip install --upgrade pip - python3 -m pip install 'black>=24.10.0' + curl -LsSf https://astral.sh/uv/install.sh | sh + uv tool install ruff + uv tool install black - # NOTE: This would suffice, however it is less informative in terms of the 3 possible outcomes - # - name: QA Step - check linting - # shell: bash - # id: linting - # run: | - # python3 -m black . - - # QA STEP - - name: QA Step - check linting - shell: bash - id: linting + # black doesn't catch all syntax errors, so we check them explicitly. + - name: Check syntax errors + id: syntax-errors run: | - python3 -m black --check . \ - && exit 0 \ - || (echo "exit_code=$?" >> "$GITHUB_OUTPUT" && exit 1); + ERROR=0 + python3.9 -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 - # OUTCOME 1 of QA STEP - - name: QA Step - no linting errors - if: steps.linting.outcome == 'success' - shell: bash - run: |- - echo "::notice::QA step linting succeeded" - exit 0; + - name: Black formatter + id: black + run: | + uvx black --diff --check . + continue-on-error: true - # OUTCOME 2i of QA STEP - - name: QA Step - unprettified code with no syntax errors - if: steps.linting.outputs.exit_code == 1 - shell: bash - run: |- - echo "::group::QA step succeeded with warnings" - echo "::warning::one or more files contains unformatted code but no syntax errors"; - echo "::notice::please run the linter before pushing!"; - echo "::endgroup::" - exit 0; + - name: Ruff check + id: ruff + run: | + uvx ruff check + continue-on-error: true - # OUTCOME 2ii of QA STEP - - name: QA Step - code contains syntax errors - if: steps.linting.outputs.exit_code == 123 - shell: bash - run: |- - echo "::group::QA step failed" - echo "::error::one or more files contains syntax errors"; - echo "::notice::please run the linter and fix syntax errors before pushing!"; - echo "::endgroup::" - exit 1; + - name: Final check + run: | + ERROR=0 + if [ "${{ steps.syntax-errors.outcome }}" != "success" ]; then + 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 + fi + if [ "${{ steps.ruff.outcome }}" != "success" ]; then + echo "::error::Ruff check failed, see 'ruff' step for the details." && ERROR=1 + fi + exit $ERROR diff --git a/.github/workflows/ci-bonsai-daily.yml b/.github/workflows/ci-bonsai-daily.yml index d7f59ec18d..dfa6be9a00 100644 --- a/.github/workflows/ci-bonsai-daily.yml +++ b/.github/workflows/ci-bonsai-daily.yml @@ -96,7 +96,7 @@ jobs: uses: actions/checkout@v2 with: repository: IfcOpenShell/bonsai_unstable_repo - token: ${{ secrets.IOS_TO_BLENDER_REPO }} + token: ${{ secrets.IFCOPENBOT_TOKEN }} path: bonsai_unstable_repo - name: Download Blender and run critical tests @@ -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.3/blender-4.3.2-linux-x64.tar.xz + wget -q -O blender.tar.xz https://download.blender.org/release/Blender4.5/blender-4.5.0-linux-x64.tar.xz tar -xf blender.tar.xz # Setup Blender. @@ -175,6 +175,7 @@ jobs: cd IfcOpenShell/src/bonsai pip install pytest-blender + pip install pytest-bdd blender --background --python scripts/setup_pytest.py blender --python-expr "import bonsai; print(bonsai.bbim_semver); import ifcopenshell; print(ifcopenshell.version)" --background make test diff --git a/.github/workflows/ci-bsdd-pypi.yaml b/.github/workflows/ci-bsdd-pypi.yaml index a1f68bf236..b59ddbf2e4 100644 --- a/.github/workflows/ci-bsdd-pypi.yaml +++ b/.github/workflows/ci-bsdd-pypi.yaml @@ -28,7 +28,7 @@ jobs: cd src/bsdd && make dist IS_STABLE=TRUE - name: Publish a Python distribution to PyPI - uses: ortega2247/pypi-upload-action@master + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/ci-ifc4d-pypi.yaml b/.github/workflows/ci-ifc4d-pypi.yaml index d2fa648ddb..6ecd2c37d2 100644 --- a/.github/workflows/ci-ifc4d-pypi.yaml +++ b/.github/workflows/ci-ifc4d-pypi.yaml @@ -28,7 +28,7 @@ jobs: cd src/ifc4d && make dist IS_STABLE=TRUE - name: Publish a Python distribution to PyPI - uses: ortega2247/pypi-upload-action@master + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/ci-ifc5d-pypi.yaml b/.github/workflows/ci-ifc5d-pypi.yaml index c4669e1af2..6c545f603d 100644 --- a/.github/workflows/ci-ifc5d-pypi.yaml +++ b/.github/workflows/ci-ifc5d-pypi.yaml @@ -28,7 +28,7 @@ jobs: cd src/ifc5d && make dist IS_STABLE=TRUE - name: Publish a Python distribution to PyPI - uses: ortega2247/pypi-upload-action@master + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/ci-ifccityjson-pypi.yaml b/.github/workflows/ci-ifccityjson-pypi.yaml index f3c921b094..19b7a8e9d7 100644 --- a/.github/workflows/ci-ifccityjson-pypi.yaml +++ b/.github/workflows/ci-ifccityjson-pypi.yaml @@ -28,7 +28,7 @@ jobs: cd src/ifccityjson && make dist IS_STABLE=TRUE - name: Publish a Python distribution to PyPI - uses: ortega2247/pypi-upload-action@master + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/ci-ifcclash-pypi.yaml b/.github/workflows/ci-ifcclash-pypi.yaml index e53c12ab67..adae45e008 100644 --- a/.github/workflows/ci-ifcclash-pypi.yaml +++ b/.github/workflows/ci-ifcclash-pypi.yaml @@ -28,7 +28,7 @@ jobs: cd src/ifcclash && make dist IS_STABLE=TRUE - name: Publish a Python distribution to PyPI - uses: ortega2247/pypi-upload-action@master + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/ci-ifccsv-pypi.yaml b/.github/workflows/ci-ifccsv-pypi.yaml index d1a40f94ab..b62f372bf6 100644 --- a/.github/workflows/ci-ifccsv-pypi.yaml +++ b/.github/workflows/ci-ifccsv-pypi.yaml @@ -28,7 +28,7 @@ jobs: cd src/ifccsv && make dist IS_STABLE=TRUE - name: Publish a Python distribution to PyPI - uses: ortega2247/pypi-upload-action@master + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/ci-ifcdiff-pypi.yaml b/.github/workflows/ci-ifcdiff-pypi.yaml index 6fc88a6059..6059d7a3dd 100644 --- a/.github/workflows/ci-ifcdiff-pypi.yaml +++ b/.github/workflows/ci-ifcdiff-pypi.yaml @@ -28,7 +28,7 @@ jobs: cd src/ifcdiff && make dist IS_STABLE=TRUE - name: Publish a Python distribution to PyPI - uses: ortega2247/pypi-upload-action@master + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/ci-ifcfm-pypi.yaml b/.github/workflows/ci-ifcfm-pypi.yaml index 576d150dc4..50e8707796 100644 --- a/.github/workflows/ci-ifcfm-pypi.yaml +++ b/.github/workflows/ci-ifcfm-pypi.yaml @@ -28,7 +28,7 @@ jobs: cd src/ifcfm && make dist IS_STABLE=TRUE - name: Publish a Python distribution to PyPI - uses: ortega2247/pypi-upload-action@master + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/ci-ifcopenshell-conda-daily.yml b/.github/workflows/ci-ifcopenshell-conda-daily.yml index bad86bf2aa..c1bdb874ab 100644 --- a/.github/workflows/ci-ifcopenshell-conda-daily.yml +++ b/.github/workflows/ci-ifcopenshell-conda-daily.yml @@ -35,11 +35,11 @@ jobs: - name: Version + date str id: verdate - run: echo "verdate='${{ steps.version.outputs.version }}alpha${{ steps.date.outputs.date }}'" >> $GITHUB_OUTPUT + run: echo "verdate=${{ steps.version.outputs.version }}alpha${{ steps.date.outputs.date }}" >> $GITHUB_OUTPUT test: - name: ${{ matrix.platform.distver }}-${{ matrix.pyver.name }}-${{ matrix.variant }} + name: ${{ matrix.platform.distver }}-${{ matrix.pyver.name }} needs: activate runs-on: ${{ matrix.platform.distver }} defaults: @@ -48,57 +48,67 @@ jobs: strategy: fail-fast: false matrix: - variant: [novtk, all] pyver: [ -# { name: py311, distver: '3.11'}, { name: py312, distver: '3.12'} ] platform: [ { name: win, distver: windows-latest, pkg_dir: 'win-64' }, { name: linux, distver: ubuntu-latest, pkg_dir: 'linux-64' }, - { name: macOS, distver: macos-latest, pkg_dir: 'osx-64' } + { name: macOS-arm, distver: macos-latest, pkg_dir: 'osx-arm64' }, + { name: macOS-x86, distver: macos-13, pkg_dir: 'osx-64' } ] steps: - - name: Set up swap space + - name: Set Swap Space if: runner.os == 'Linux' - uses: pierotofy/set-swap-space@v1.0 + uses: pierotofy/set-swap-space@master with: swap-size-gb: 10 - + + - name: set ARTIFACTS ENV vars + shell: bash + run: | + pwd + if [[ "$RUNNER_OS" == "Windows" ]]; then + echo "ARTIFACTS_DIR=D:/a/artifacts" >> $GITHUB_ENV + elif [[ "$RUNNER_OS" == "macOS" ]]; then + echo "ARTIFACTS_DIR=/Users/runner/work/artifacts" >> $GITHUB_ENV + elif [[ "$RUNNER_OS" == "Linux" ]]; then + echo "ARTIFACTS_DIR=/home/runner/work/artifacts" >> $GITHUB_ENV + fi + - uses: actions/checkout@v4 with: submodules: recursive - name: Download and extract MacOSX SDK - if: ${{ runner.os == 'macOS' }} + if: ${{ matrix.platform.name == 'macOS-x86' }} run: | curl -L https://github.com/phracker/MacOSX-SDKs/releases/download/11.3/MacOSX10.13.sdk.tar.xz | tar -xvJf - -C /Users/runner/work/ - - 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: >- - python=3.11 + python=3.12 anaconda-client - boa + rattler-build - name: create conda package dist dir run: | - mkdir -p ${{ github.workspace }}/dist + mkdir -p ${{ env.ARTIFACTS_DIR }} - name: build & test ifcopenshell run: | - conda mambabuild . --python ${{ matrix.pyver.distver }} --no-remove-work-dir --output-folder '${{ github.workspace }}/dist' --variants='{variant: ${{ matrix.variant }}}' - working-directory: ./conda + rattler-build build -r conda/recipe.yaml --output-dir '${{ env.ARTIFACTS_DIR }}' env: VERSION_OVERRIDE: ${{ needs.activate.outputs.verdate }} - name: upload to anaconda if: ${{ matrix.platform.name == 'win' }} run: | - anaconda -t ${{ secrets.ANACONDA_TOKEN }} upload --force --user ifcopenshell '${{ github.workspace }}/dist/${{ matrix.platform.pkg_dir }}/*.tar.bz2' + anaconda -t ${{ secrets.ANACONDA_TOKEN }} upload --force --user ifcopenshell '${{ env.ARTIFACTS_DIR }}/${{ matrix.platform.pkg_dir }}/*.conda' - name: upload to anaconda if: ${{ matrix.platform.name != 'win' }} run: | - anaconda -t ${{ secrets.ANACONDA_TOKEN }} upload --force --user ifcopenshell ${{ github.workspace }}/dist/${{ matrix.platform.pkg_dir }}/*.tar.bz2 + anaconda -t ${{ secrets.ANACONDA_TOKEN }} upload --force --user ifcopenshell ${{ env.ARTIFACTS_DIR }}/${{ matrix.platform.pkg_dir }}/*.conda diff --git a/.github/workflows/ci-ifcopenshell-docker.yml b/.github/workflows/ci-ifcopenshell-docker.yml index a1c7a336c1..cdc2e173b4 100644 --- a/.github/workflows/ci-ifcopenshell-docker.yml +++ b/.github/workflows/ci-ifcopenshell-docker.yml @@ -9,7 +9,7 @@ on: jobs: activate: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 if: | github.repository == 'IfcOpenShell/IfcOpenShell' && !startsWith(github.event.head_commit.message, 'Release ') && @@ -18,7 +18,7 @@ jobs: - run: echo ok go build: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: activate steps: - uses: actions/checkout@v2 @@ -35,7 +35,7 @@ jobs: - name: ccache - uses: hendrikmuhs/ccache-action@v1 + uses: hendrikmuhs/ccache-action@v1.2 - name: Build ifcopenshell @@ -44,6 +44,7 @@ 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 \ @@ -75,7 +76,7 @@ jobs: make package working-directory: build - name: Upload - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: # Artifact name name: ifcos-artifacts @@ -83,7 +84,7 @@ jobs: path: build/assets/Ifc* deliver: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: build name: Docker Build, Tag, Push @@ -118,6 +119,6 @@ jobs: repository: aecgeeks/ifcopenshell # Since the dispatch is set to `tag`, `github.ref_name` should evaluate to the pushed tag # On a workflow dispatch, `ref_name` will take on the value from the dispatch payload - tags: aecgeeks/ifcopenshell:${{ github.ref_name }}${{ github.ref_name == github.event.repository.default_branch && ',aecgeeks/ifcopenshell:latest' }} + tags: aecgeeks/ifcopenshell:${{ github.ref_name }}${{ github.ref_name == github.event.repository.default_branch && ',aecgeeks/ifcopenshell:22.04' }} file: ./Dockerfile push: true diff --git a/.github/workflows/ci-ifcopenshell-python-pypi.yml b/.github/workflows/ci-ifcopenshell-python-pypi.yml index 73199521bb..0389f1c84f 100644 --- a/.github/workflows/ci-ifcopenshell-python-pypi.yml +++ b/.github/workflows/ci-ifcopenshell-python-pypi.yml @@ -24,7 +24,7 @@ jobs: strategy: fail-fast: false matrix: - pyver: [py39, py310, py311, py312] + pyver: [py39, py310, py311, py312, py313] config: - { name: "Windows 64bit", @@ -44,6 +44,8 @@ jobs: } steps: - uses: actions/checkout@v2 + with: + submodules: recursive - 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 @@ -59,7 +61,7 @@ jobs: cd src/ifcopenshell_${{ matrix.config.short_name }}_${{ matrix.pyver }} && make dist PLATFORM=${{ matrix.config.short_name }} PYVERSION=${{ matrix.pyver }} IS_STABLE=TRUE - name: Publish a Python distribution to PyPI - uses: ortega2247/pypi-upload-action@master + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/ci-ifcopenshell-python.yml b/.github/workflows/ci-ifcopenshell-python.yml index 46f7074fe0..6ebefeb5d7 100644 --- a/.github/workflows/ci-ifcopenshell-python.yml +++ b/.github/workflows/ci-ifcopenshell-python.yml @@ -19,7 +19,7 @@ jobs: strategy: fail-fast: false matrix: - pyver: [py39, py310, py311, py312] + pyver: [py39, py310, py311, py312, py313] config: - { name: "Windows 64bit", @@ -39,6 +39,8 @@ jobs: } steps: - uses: actions/checkout@v2 + with: + submodules: recursive - 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-ifcpatch-pypi.yaml b/.github/workflows/ci-ifcpatch-pypi.yaml index cdeb78c27d..312fe49f74 100644 --- a/.github/workflows/ci-ifcpatch-pypi.yaml +++ b/.github/workflows/ci-ifcpatch-pypi.yaml @@ -28,7 +28,7 @@ jobs: cd src/ifcpatch && make dist IS_STABLE=TRUE - name: Publish a Python distribution to PyPI - uses: ortega2247/pypi-upload-action@master + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/ci-ifctester-pypi.yml b/.github/workflows/ci-ifctester-pypi.yml index 51835418e7..6b594509ef 100644 --- a/.github/workflows/ci-ifctester-pypi.yml +++ b/.github/workflows/ci-ifctester-pypi.yml @@ -28,7 +28,7 @@ jobs: cd src/ifctester && make dist IS_STABLE=TRUE - name: Publish a Python distribution to PyPI - uses: ortega2247/pypi-upload-action@master + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5845b9d8d7..aed1223646 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -82,6 +82,7 @@ jobs: cmake \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=/usr \ -DCMAKE_SYSTEM_PREFIX_PATH=/usr \ @@ -127,12 +128,21 @@ jobs: cd ../src/ifcopenshell-python mv ifcopenshell ifcopenshell-local # Force testing on installed module pip install -e ../ifcpatch --no-deps # Needed for sql.py tests. - make test - cd ../bcf && make test + ERROR=0 + make test || ERROR=1 + cd ../bcf && make test || ERROR=1 pip install requests - cd ../bsdd && make test + cd ../bsdd && make test || ERROR=1 pip install deepdiff - cd ../ifcdiff && make test - cd ../ifcpatch && make test + cd ../ifcdiff && make test || ERROR=1 + cd ../ifcpatch && make test || ERROR=1 pip install -e ../ifctester --no-deps - cd ../ifctester && make test + cd ../ifctester && make test || ERROR=1 + # Run mathutils related tests at the end to ensure no other code is relying on mathutils. + cd ../ifcopenshell-python + pip install mathutils + make test-mathutils || ERROR=1 + if [ $ERROR -ne 0 ]; then + echo "One or more tests failed"; + exit 1; + fi diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index aa51b4235e..93ecaf11d8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,6 +4,7 @@ on: push: tags: - 'v[0-9].[0-9].[0-9]*' + workflow_dispatch: jobs: activate: @@ -45,6 +46,7 @@ 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/.gitignore b/.gitignore index d66c4528a3..6843c3f40b 100644 --- a/.gitignore +++ b/.gitignore @@ -86,12 +86,13 @@ src/bonsai/bonsai/bim/data/build/ 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/drawings src/bonsai/layouts # ifcopenshell swig and compiled files -src/ifcopenshell-python/ifcopenshell/_ifcopenshell_wrapper.so +src/ifcopenshell-python/ifcopenshell/_ifcopenshell_wrapper*.so src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.py # apple @@ -106,4 +107,4 @@ src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.py src/bonsai/bonsai/bim/schema/Brick.ttl bonsaiDecoratorForLoads.code-workspace -dev_environment.bat + diff --git a/VERSION b/VERSION index 100435be13..b60d71966a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.8.2 +0.8.4 diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 79da4292c4..ebebb778f9 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -18,7 +18,12 @@ ################################################################################ cmake_minimum_required(VERSION 3.21) -set(CMAKE_CXX_STANDARD 17) +if (NOT DEFINED CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 17) +endif() +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) @@ -29,13 +34,12 @@ endif() add_definitions(-D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) -cmake_policy(SET CMP0048 NEW) -cmake_policy(SET CMP0074 NEW) -cmake_policy(SET CMP0078 NEW) -cmake_policy(SET CMP0086 NEW) -if (POLICY CMP0144) +if(POLICY CMP0144) # 3.27 cmake_policy(SET CMP0144 NEW) # find_package() uses upper-case _ROOT variables. endif() +if(POLICY CMP0167) # 3.30 + cmake_policy(SET CMP0167 OLD) +endif() if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") @@ -64,7 +68,7 @@ option(BUILD_IFCPYTHON "Build IfcPython." ON) option(BUILD_CONVERT "Build IfcConvert executable." ON) option(BUILD_DOCUMENTATION "Build IfcOpenShell Documentation." OFF) option(BUILD_EXAMPLES "Build example applications." ON) -option(BUILD_GEOMSERVER "Build IfcGeomServer executable." ON) +option(BUILD_GEOMSERVER "Build IfcGeomServer executable (Open CASCADE is required)." ON) 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) @@ -85,6 +89,12 @@ option(USERSPACE_PYTHON_PREFIX "Installs IfcPython for the current user only ins option(ADD_COMMIT_SHA "Add commit sha and branch in version number, warning results in many rebuilds, requires git" OFF) option(VERSION_OVERRIDE "Override the version defined in IfcParse.h with the file VERSION in the repository root" OFF) +set( + PYTHON_MODULE_INSTALL_DIR + "" CACHE PATH + "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) @@ -218,6 +228,10 @@ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) endmacro() if(WITH_CGAL) + if(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT EXISTS "${CGAL_INCLUDE_DIR}") + message(FATAL_ERROR "CGAL_INCLUDE_DIR ('${CGAL_INCLUDE_DIR}') is not provided or doesn't exist.") + endif() + add_definitions(-DIFOPSH_WITH_CGAL) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) @@ -251,7 +265,7 @@ if(GLTF_SUPPORT OR CITYJSON_SUPPORT) set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_GLTF) endif() -# Add USD support to serializers +# Add USD support to serializers if(USD_SUPPORT) UNIFY_ENVVARS_AND_CACHE(USD_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(USD_LIBRARY_DIR) @@ -274,13 +288,13 @@ if(USD_SUPPORT) endif() set(USD_LIBRARIES - usd_usd + usd_usd usd_usdGeom - usd_usdShade - usd_usdLux - usd_vt - usd_sdf - usd_tf + usd_usdShade + usd_usdLux + usd_vt + usd_sdf + usd_tf usd_gf ) @@ -391,7 +405,9 @@ 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() - find_package(LibXml2 REQUIRED) + if(IFCXML_SUPPORT) + find_package(LibXml2 REQUIRED) + endif() restore_wasm_sysroot() endif() @@ -407,44 +423,85 @@ if(BUILD_IFCGEOM) # Open CASCADE if(WITH_OPENCASCADE) - if("${OCC_INCLUDE_DIR}" STREQUAL "") + + # Fallback for missing OCC_INCLUDE_DIR. + if(NOT OCC_INCLUDE_DIR) clear_wasm_sysroot() find_path(OCC_INCLUDE_DIR Standard_Version.hxx PATHS /usr/include/occt /usr/include/oce /usr/include/opencascade - REQUIRED ) restore_wasm_sysroot() if(OCC_INCLUDE_DIR) message(STATUS "Found Open CASCADE include files in: ${OCC_INCLUDE_DIR}") - else() - message(FATAL_ERROR "Unable to find Open CASCADE include directory, specify OCC_INCLUDE_DIR manually.") endif() else() 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_INCLUDE_DIR) - file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAJOR - REGEX "#define OCC_VERSION_MAJOR.*" + if("${OCC_LIBRARY_DIR}" STREQUAL "") + find_library(OCC_LIBRARY TKernel + PATHS + /usr/lib ) - 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}") - endif(OCC_INCLUDE_DIR) - set(OPENCASCADE_LIBRARY_NAMES + if(OCC_LIBRARY) + GET_FILENAME_COMPONENT(OCC_LIBRARY_DIR ${OCC_LIBRARY} PATH) + message(STATUS "Found Open CASCADE library files in: ${OCC_LIBRARY_DIR}") + endif() + else() + 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 OCCT_INCLUDE_DIR ('${OCC_INCLUDE_DIR}') " + "and OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}')." + ) + elseif(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR) + find_package(OpenCASCADE CONFIG REQUIRED) + get_target_property(OCC_INCLUDE_DIR TKernel INTERFACE_INCLUDE_DIRECTORIES) + get_target_property(TKERNEL_LIB_PATH TKernel LOCATION) + get_filename_component(OCC_LIBRARY_DIR "${TKERNEL_LIB_PATH}" DIRECTORY) + 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." + ) + endif() + + # 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}") + + set( + OPENCASCADE_LIBRARY_NAMES TKernel TKMath TKBRep TKGeomBase TKGeomAlgo TKG3d TKG2d TKShHealing TKTopAlgo TKMesh TKPrim TKBool TKBO TKFillet TKXSBase TKOffset TKHLR @@ -458,24 +515,6 @@ if(BUILD_IFCGEOM) list(APPEND OPENCASCADE_LIBRARY_NAMES TKDESTEP TKDEIGES) endif(OCC_VERSION_STRING VERSION_LESS 7.8.0) - if("${OCC_LIBRARY_DIR}" STREQUAL "") - find_library(OCC_LIBRARY TKernel - PATHS - /usr/lib - REQUIRED - ) - - if(OCC_LIBRARY) - GET_FILENAME_COMPONENT(OCC_LIBRARY_DIR ${OCC_LIBRARY} PATH) - message(STATUS "Found Open CASCADE library files in: ${OCC_LIBRARY_DIR}") - else() - message(FATAL_ERROR "Unable find Open CASCADE library directory, specify OCC_LIBRARY_DIR manually.") - endif() - else() - 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() - clear_wasm_sysroot() find_library(libTKernel NAMES TKernel TKerneld PATHS ${OCC_LIBRARY_DIR} NO_DEFAULT_PATH) restore_wasm_sysroot() @@ -514,7 +553,7 @@ if(BUILD_IFCGEOM) if(OCCT_STATIC) find_package(Threads) - + if(WASM_BUILD) set(OPENCASCADE_LIBRARIES ${OPENCASCADE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) else() @@ -526,7 +565,7 @@ if(BUILD_IFCGEOM) 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() @@ -687,14 +726,27 @@ if(HDF5_SUPPORT) endif() if(NOT HDF5_LIBRARIES) - # debian default - set(HDF5_LIBRARIES - /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5_cpp.so - /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.so - /usr/lib/x86_64-linux-gnu/libsz.so - /usr/lib/x86_64-linux-gnu/libaec.so - z dl - ) + if(NOT WIN32 AND NOT APPLE) + # debian default + set(HDF5_LIBRARIES + /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5_cpp.so + /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.so + /usr/lib/x86_64-linux-gnu/libsz.so + /usr/lib/x86_64-linux-gnu/libaec.so + z dl + ) + else() + find_package(HDF5 CONFIG) + if(NOT HDF5_DIR) + message( + FATAL_ERROR + "HDF5_LIBRARY_DIR is not provided (current value: '${HDF5_LIBRARY_DIR}'). " + "Also could not find HDF5 package." + ) + endif() + message(STATUS "Found HDF5 package: '${HDF5_DIR}'.") + set(HDF5_LIBRARIES hdf5_cpp-static) + endif() endif() add_definitions(-DWITH_HDF5) @@ -811,6 +863,21 @@ else() endif() endif(MSVC) + +# Ensure other dependencies are provided. +if(NOT EXISTS "${EIGEN_DIR}") + find_package(Eigen3 CONFIG) + if(NOT Eigen3_DIR) + 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() + + 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} @@ -911,7 +978,7 @@ if(BUILD_IFCGEOM) if(WASM_BUILD) set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} IfcGeom ${IFCGEOM_SCHEMA_LIBRARIES}) else() - set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} IfcGeom ${IFCGEOM_SCHEMA_LIBRARIES} IfcGeom ${IFCGEOM_SCHEMA_LIBRARIES}) + set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} IfcGeom ${IFCGEOM_SCHEMA_LIBRARIES} IfcGeom ${IFCGEOM_SCHEMA_LIBRARIES}) endif() endif() @@ -1001,7 +1068,7 @@ if(BUILD_IFCGEOM) 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}) set_property(TARGET geometry_kernel_${kernel} APPEND PROPERTY COMPILE_FLAGS "-DIFC_GEOM_EXPORTS") # needed? @@ -1009,7 +1076,7 @@ if(BUILD_IFCGEOM) # endif() target_link_libraries(geometry_kernel_${kernel} ${${KERNEL_UPPER}_LIBRARIES}) 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") @@ -1029,7 +1096,7 @@ if(BUILD_IFCGEOM) 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} STATIC ${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) @@ -1068,7 +1135,7 @@ if(BUILD_CONVERT OR BUILD_IFCPYTHON) foreach(schema ${SCHEMA_VERSIONS}) add_library(Serializers_ifc${schema} STATIC ${SERIALIZERS_S_FILES}) 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() @@ -1160,6 +1227,11 @@ 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}) @@ -1248,7 +1320,7 @@ if(BUILD_IFCMAX) endif() if(WITH_CGAL) - add_subdirectory(../src/svgfill svgfill) + add_subdirectory(../src/svgfill svgfill) endif() if(BUILD_QTVIEWER) @@ -1306,11 +1378,13 @@ if(BUILD_CONVERT) endif(BUILD_CONVERT) if(BUILD_CONVERT OR BUILD_IFCPYTHON) - install(TARGETS geometry_serializer ${geometry_serializer_libraries} - ARCHIVE DESTINATION ${LIBDIR} - LIBRARY DESTINATION ${LIBDIR} - RUNTIME DESTINATION ${BINDIR} - ) + if(WITH_OPENCASCADE) + install(TARGETS geometry_serializer ${geometry_serializer_libraries} + ARCHIVE DESTINATION ${LIBDIR} + LIBRARY DESTINATION ${LIBDIR} + RUNTIME DESTINATION ${BINDIR} + ) + endif() endif(BUILD_CONVERT OR BUILD_IFCPYTHON) # Cmake uninstall target @@ -1328,6 +1402,8 @@ endif() 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}") diff --git a/cmake/utilities.cmake b/cmake/utilities.cmake index fe7c4fa20d..590c5e5c1d 100644 --- a/cmake/utilities.cmake +++ b/cmake/utilities.cmake @@ -121,4 +121,4 @@ function(files_for_ifc_version IFC_VERSION RESULT_NAME) ${IFC_PARSE_DIR}/Ifc${IFC_VERSION}.cpp PARENT_SCOPE ) -endfunction() \ No newline at end of file +endfunction() diff --git a/conda/bld.bat b/conda/build.bat similarity index 92% rename from conda/bld.bat rename to conda/build.bat index 07e546052d..388e5cd746 100644 --- a/conda/bld.bat +++ b/conda/build.bat @@ -9,6 +9,7 @@ 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%" ^ @@ -49,3 +50,7 @@ if errorlevel 1 exit 1 ninja install -j 1 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 diff --git a/conda/build.sh b/conda/build.sh index c0d447a6f4..b17bc87159 100644 --- a/conda/build.sh +++ b/conda/build.sh @@ -16,6 +16,7 @@ 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 \ @@ -46,4 +47,6 @@ cmake ${CMAKE_ARGS} -G Ninja \ ninja -ninja install -j 1 \ No newline at end of file +ninja install -j 1 + +python "${RECIPE_DIR}/update_version_init.py" "${PKG_VERSION}" "${SP_DIR}/ifcopenshell/__init__.py" \ No newline at end of file diff --git a/conda/conda_build_config.yaml b/conda/conda_build_config.yaml index 2b600d14be..47b843ee31 100644 --- a/conda/conda_build_config.yaml +++ b/conda/conda_build_config.yaml @@ -1,6 +1,5 @@ -variant: - - novtk - - all +python: + - 3.12 occt: - 7.8.1 @@ -24,14 +23,15 @@ cxx_compiler_version: - '12' # [linux] - '16' # [osx] c_stdlib_version: -- '2.12' # [linux] -- '10.13' # [osx] + - 2.17 # [linux] + - 10.13 # [osx and x86_64] + - 11.0 # [osx and arm64] hdf5: -- 1.14.3 +- 1.14.6 libboost_devel: -- '1.84' +- '1.86' libxml2: -- '2' +- 2.13 mpfr: - '4' gmp: @@ -47,12 +47,12 @@ target_platform: - win-64 # [win] - linux-64 # [linux] - osx-64 # [osx] -macos_machine: -- x86_64-apple-darwin13.4.0 -MACOSX_DEPLOYMENT_TARGET: -- '10.13' -MACOSX_SDK_VERSION: -- '10.13' +macos_machine: # [osx] + - x86_64-apple-darwin13.4.0 # [osx and x86_64] + - arm64-apple-darwin20.0.0 # [osx and arm64] +MACOSX_DEPLOYMENT_TARGET: # [osx] + - 11.0 # [osx and arm64] + - 10.13 # [osx and x86_64] -CONDA_BUILD_SYSROOT: - - "/Users/runner/work/MacOSX10.13.sdk" # [osx] \ No newline at end of file +CONDA_BUILD_SYSROOT: # [osx] + - "/Users/runner/work/MacOSX10.13.sdk" # [osx and x86_64] diff --git a/conda/meta.yaml b/conda/recipe.yaml similarity index 86% rename from conda/meta.yaml rename to conda/recipe.yaml index 53ad90be3f..aeddedbe07 100644 --- a/conda/meta.yaml +++ b/conda/recipe.yaml @@ -1,64 +1,78 @@ -{% set version = environ.get('VERSION_OVERRIDE', '0.8.0') %} -{% set build = 0 %} - -# Higher number -> Always prioritize "novtk" variant over "all" variant -{% set build = build + 200 %} # [variant == "novtk"] -{% set build = build + 100 %} # [variant == "all"] +context: + version: ${{ env.get("VERSION_OVERRIDE", default="0.8.2.1") }} + build: 1 package: name: ifcopenshell - version: {{ version }} + version: ${{ version }} source: - path: ../ + - path: .. build: - number: {{ build }} - skip: true # [py<39] - binary_relocation: false # [osx] - string: py{{ CONDA_PY }}_{{ variant }}_h{{ PKG_HASH }}_{{ build }} - run_exports: - - {{ pin_subpackage('ifcopenshell', max_pin='x.x.x') }} *{{ variant }}* - + number: ${{ build }} + dynamic_linking: + binary_relocation: ${{ true if osx }} requirements: build: - - cmake + - if: build_platform != target_platform + then: + - python + - cross-python_${{ target_platform }} + - cmake <4 - ninja - swig >=4.1.1 - - {{ stdlib("c") }} - - {{ compiler('c') }} - - {{ compiler('cxx') }} + - ${{ stdlib("c") }} + - ${{ compiler('c') }} + - ${{ compiler('cxx') }} host: - python - libboost-devel - - occt *=*{{ variant }}* + - occt - libxml2 - cgal-cpp - hdf5 - eigen - mpfr - nlohmann_json - - gmp # [unix] - - mpir # [win] + - gmp - zlib run: - python - - {{ pin_compatible('occt', max_pin='x.x.x') }} *{{ variant }}* - - {{ pin_compatible('cgal-cpp', max_pin='x.x') }} - - -test: - imports: - - ifcopenshell + - shapely + - typing_extensions + - ${{ pin_compatible('occt', upper_bound='x.x.x') }} + - ${{ pin_compatible('cgal-cpp', upper_bound='x.x') }} + run_exports: + - ${{ pin_subpackage('ifcopenshell', upper_bound='x.x.x') }} +tests: + - python: + imports: + - ifcopenshell + pip_check: false + - script: + - python -c "import ifcopenshell; assert ifcopenshell.version == '${{ version }}', 'print(ifcopenshell.version)'" + requirements: + run: + - occt * *novtk* # Ensure that even though compiled against OCCT with VTK, it can still run with OCCT without VTK + - pytest + - python-dateutil + - xmlschema + - xsdata + - lxml + - isodate + - lark + - networkx + - tabulate + - shapely about: - home: https://ifcopenshell.org license: LGPL-3.0-or-later license_file: COPYING - summary: 'IfcOpenShell is a library to support the IFC file format' + summary: IfcOpenShell is a library to support the IFC file format description: | IfcOpenShell ============ @@ -293,8 +307,9 @@ about: [MSYS2]: https://msys2.github.io/ "MSYS2" [win/readme.md]: https://github.com/IfcOpenShell/IfcOpenShell/tree/master/win/readme.md "win/readme.md" [nix/build-all.py]: https://github.com/IfcOpenShell/IfcOpenShell/tree/master/nix/build-all.py "nix/build-all.py" - doc_url: https://ifcopenshell.org/ - dev_url: https://github.com/IfcOpenShell/IfcOpenShell + homepage: https://ifcopenshell.org + repository: https://github.com/IfcOpenShell/IfcOpenShell + documentation: https://ifcopenshell.org/ extra: recipe-maintainers: diff --git a/conda/update_version_init.py b/conda/update_version_init.py new file mode 100644 index 0000000000..e5a7a6fd22 --- /dev/null +++ b/conda/update_version_init.py @@ -0,0 +1,32 @@ +import re +import argparse +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) + + # Read the file and replace the version + file_contents = file_path.read_text(encoding="utf-8") + new_contents = re.sub(r'version = "0\.0\.0"', f'version = "{version}"', file_contents) + + # Write the updated contents back to the file + file_path.write_text(new_contents, encoding="utf-8") + + print(f"Updated version in {file_path} to {version}") + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Update the version string in a Python file.") + parser.add_argument( + "version", + type=str, + help="The version string to replace '0.0.0' with (e.g., '1.2.3')." + ) + parser.add_argument( + "file", + type=str, + help="The path to the __init__.py file where the version will be updated." + ) + + args = parser.parse_args() + update_version(args.file, args.version) diff --git a/nix/build-all.py b/nix/build-all.py index 5f2f2f0a79..bcf224f5ab 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -18,6 +18,32 @@ # # ############################################################################### +""" +Example usage: + # Build all targets by default. + python build-all.py + + # Build just the provided targets. + python build-all.py IfcParse IfcOpenShell-Python + + +Available arguments: + ``-py-313`` - build for specific Python version + (building for all supported Python version by default). + ``-wasm`` - compile for wasm + ``-shared`` - build shared libraries. By default will build static. + ``-diskcleanup`` - clean up build directories after finishing building dependencies + ``-v`` - enable verbose logs + + +Used environment variables: + - ``CXXFLAGS``, ``CPPFLAGS``, ``CFLAGS``, ``LDFLAGS`` + - ``BUILD_DIR`` - build directory. By default will use "build" folder in IfcOpenShell repository. + - ``DEPS_DIR`` - dependencies directory. By default will create automatic folder in build directory. + - ``BUILD_CFG`` - build configuration, 'RelWithDebInfo' by default. +""" + + ############################################################################### # # # This script builds IfcOpenShell and its dependencies # @@ -67,15 +93,24 @@ import sysconfig # @todo temporary for expired mpfr.org certificate on 2023-04-08 import ssl + 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 +try: + from typing import Union, Literal +except: + # python 3.6 compatibility for rocky 8 + from typing import Union + from typing_extensions import Literal logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) ch = logging.StreamHandler() -ch.setLevel(logging.INFO) logger.addHandler(ch) PROJECT_NAME = "IfcOpenShell" @@ -88,14 +123,14 @@ OCE_VERSION = "0.18.3" OCCT_VERSION = "7.8.1" BOOST_VERSION = "1.86.0" PCRE_VERSION = "8.41" -LIBXML2_VERSION = "2.9.11" +LIBXML2_VERSION = "2.13.8" SWIG_VERSION = "4.0.2" OPENCOLLADA_VERSION = "v1.6.68" HDF5_VERSION = "1.12.1" GMP_VERSION = "6.2.1" -MPFR_VERSION = "3.1.6" # latest is 4.1.0 -CGAL_VERSION = "5.3" +MPFR_VERSION = "3.1.6" # latest is 4.1.0 +CGAL_VERSION = "5.6.x-branch" USD_VERSION = "23.05" TBB_VERSION = "2021.9.0" @@ -116,21 +151,27 @@ wget = "wget" strip = "strip" explicit_targets = [s for s in sys.argv[1:] if not s.startswith("-")] -flags = set(s.lstrip('-') for s in sys.argv[1:] if s.startswith("-")) +"""Targets provided by CLI.""" +flags = set(s.lstrip("-") for s in sys.argv[1:] if s.startswith("-")) +"""CLI flags.""" # Helper function for coloured printing -NO_COLOR = "\033[0m" # http://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux +NO_COLOR = ( + "\033[0m" # http://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux +) BLACK_ON_WHITE = "\033[0;30;107m" RED = "\033[31m" GREEN = "\033[32m" YELLOW = "\033[33m" MAGENTA = "\033[35m" + def cecho(message, color=NO_COLOR): """Logs message `message` in color `color`.""" logger.info(f"{color}{message}\033[0m") + def which(cmd): for path in os.getenv("PATH").split(":"): if os.path.exists(path) and cmd in os.listdir(path): @@ -154,10 +195,10 @@ CMAKE_DIR = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "cmak build_dir = os.environ.get("BUILD_DIR", os.path.join(os.path.dirname(__file__), "..", "build")) -path = [build_dir, platform.system(), "wasm" if "wasm" in flags else platform.machine()] +DEFAULT_DEPS_DIR = Path(build_dir) / platform.system() / ("wasm" if "wasm" in flags else platform.machine()) if TOOLSET: - path.append(TOOLSET) -DEFAULT_DEPS_DIR = os.path.realpath(os.path.join(*path)) + DEFAULT_DEPS_DIR = DEFAULT_DEPS_DIR / TOOLSET +DEFAULT_DEPS_DIR = os.path.realpath(DEFAULT_DEPS_DIR) DEPS_DIR = os.getenv("DEPS_DIR", DEFAULT_DEPS_DIR) @@ -169,11 +210,17 @@ BUILD_CFG = os.getenv("BUILD_CFG", "RelWithDebInfo") # Print build configuration information -cecho (f"""This script fetches and builds {PROJECT_NAME} and its dependencies -""", BLACK_ON_WHITE) -cecho("""Script configuration: +cecho( + f"""This script fetches and builds {PROJECT_NAME} and its dependencies +""", + BLACK_ON_WHITE, +) +cecho( + """Script configuration: -""", GREEN) +""", + GREEN, +) cecho(f"""* USE_OCCT = {USE_OCCT}""", MAGENTA) if USE_OCCT: cecho(" - Compiling against official Open Cascade") @@ -182,45 +229,53 @@ else: cecho(f"* Dependency Directory = {DEPS_DIR}", MAGENTA) cecho(f" - The directory where {PROJECT_NAME} dependencies are installed.") cecho(f"* Build Config Type = {BUILD_CFG}", MAGENTA) -cecho(""" - The used build configuration type for the dependencies. - Defaults to RelWithDebInfo if not specified.""") +cecho( + """ - The used build configuration type for the dependencies. + Defaults to RelWithDebInfo if not specified.""" +) if BUILD_CFG == "MinSizeRel": cecho(" WARNING: MinSizeRel build can suffer from a significant performance loss.", RED) cecho(f"* IFCOS_NUM_BUILD_PROCS = {IFCOS_NUM_BUILD_PROCS}", MAGENTA) -cecho(""" - How many compiler processes may be run in parallel. -""") +cecho( + """ - How many compiler processes may be run in parallel. +""" +) -dependency_tree = { - 'IfcParse': ('boost', 'libxml2', 'hdf5'), - 'IfcGeom': ('IfcParse', 'occ', 'json', 'cgal', 'eigen'), - 'IfcConvert': ('IfcGeom',), - 'OpenCOLLADA': ('libxml2', 'pcre'), - 'IfcGeomServer': ('IfcGeom',), - 'IfcOpenShell-Python': ('python', 'swig', 'IfcGeom'), - 'swig': ('pcre',), - 'boost': (), - 'libxml2': (), - 'python': (), - 'occ': ('freetype',), - 'pcre': (), - 'json': (), - 'hdf5': (), - 'cgal': (), - 'eigen': (), - 'freetype': (), +dependency_tree: "dict[str, tuple[str, ...]]" = { + "IfcParse": ("boost", "libxml2", "hdf5"), + "IfcGeom": ("IfcParse", "occ", "json", "cgal", "eigen"), + "IfcConvert": ("IfcGeom",), + "OpenCOLLADA": ("libxml2", "pcre"), + "IfcGeomServer": ("IfcGeom",), + "IfcOpenShell-Python": ("python", "swig", "IfcGeom"), + "swig": ("pcre",), + "boost": (), + "libxml2": (), + "python": (), + "occ": ("freetype",), + "pcre": (), + "json": (), + "hdf5": (), + "cgal": (), + "eigen": (), + "freetype": (), # 'usd': ('boost', 'oneTBB') } -def v(dep): - yield dep - for d in dependency_tree[dep]: - for x in v(d): - yield x + +def gather_dependencies(dep: str) -> "Generator[str]": + yield dep + for d in dependency_tree[dep]: + for x in gather_dependencies(d): + yield x + if "v" in flags: logger.setLevel(logging.DEBUG) + formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") + ch.setFormatter(formatter) else: logger.setLevel(logging.INFO) @@ -229,21 +284,21 @@ BUILD_STATIC = "shared" not in flags ENABLE_FLAG = "--enable-static" if BUILD_STATIC else "--enable-shared" DISABLE_FLAG = "--disable-shared" if BUILD_STATIC else "--disable-static" LINK_TYPE = "static" if BUILD_STATIC else "shared" -LINK_TYPE_UCFIRST = LINK_TYPE[0].upper() + LINK_TYPE[1:] +LINK_TYPE_UCFIRST = LINK_TYPE.capitalize() LIBRARY_EXT = "a" if BUILD_STATIC else "so" PIC = "-fPIC" if BUILD_STATIC else "" if any(f.startswith("py-") for f in flags): - PYTHON_VERSIONS = [pyv for pyv in PYTHON_VERSIONS if "py-%s" % "".join(pyv.split('.')[0:2]) in flags] + PYTHON_VERSIONS = [pyv for pyv in PYTHON_VERSIONS if f"py-{''.join(pyv.split('.')[:2])}" in flags] -if len(explicit_targets): - targets = set(sum((list(v(target)) for target in explicit_targets), [])) +if explicit_targets: + targets = {dep for target in explicit_targets for dep in gather_dependencies(target)} else: targets = set(dependency_tree.keys()) - -targets = set(t for t in targets if 'without-%s' % t.lower() not in flags) -print("Building:", *sorted(targets, key=lambda t: len(list(v(t))))) +targets = set(t for t in targets if "without-%s" % t.lower() not in flags) + +print("Building:", *sorted(targets, key=lambda t: len(list(gather_dependencies(t))))) # Check that required tools are in PATH @@ -267,11 +322,12 @@ logger.info(f"using command log file '{LOG_FILE}'") # Causing havoc in python 3.11 build try: - del os.environ['__PYVENV_LAUNCHER__'] -except: pass + del os.environ["__PYVENV_LAUNCHER__"] +except: + pass -def run(cmds, cwd=None, can_fail=False): +def run(cmds: "Sequence[str]", cwd: "Union[str, None]" = None, can_fail: bool = False) -> str: """ Wraps `subprocess.Popen.communicate()` and logs the command being executed, sets up logging `stderr` to `LOG_FILE` (in append mode) and returns stdout @@ -295,6 +351,7 @@ def run(cmds, cwd=None, can_fail=False): return stdout.strip() + if platform.system() == "Darwin": if run(["sw_vers", "-productVersion"]) >= "11.": # Apparently not supported @@ -312,34 +369,59 @@ BOOST_LOCATION = f"https://github.com/boostorg/boost/releases/download/boost-{BO # Helper functions -def run_autoconf(arg1, configure_args, cwd): +def run_autoconf(arg1: str, configure_args: "list[str]", cwd: str) -> None: configure_path = os.path.realpath(os.path.join(cwd, "..", "configure")) if not os.path.exists(configure_path): - run([bash, "./autogen.sh"], cwd=os.path.realpath(os.path.join(cwd, ".."))) # only run autogen.sh in the directory it is located and use cwd to achieve that in order to not mess up things - # Using `sh` over `bash` fixes issues with building swig + run( + [bash, "./autogen.sh"], cwd=os.path.realpath(os.path.join(cwd, "..")) + ) # only run autogen.sh in the directory it is located and use cwd to achieve that in order to not mess up things + # Using `sh` over `bash` fixes issues with building swig prefix = os.path.realpath(f"{DEPS_DIR}/install/{arg1}") wasm = [] if "wasm" in flags: wasm.append("emconfigure") - run([*wasm, "/bin/sh", "../configure"] + configure_args + [f"--prefix={prefix}"], cwd=cwd) + run( + [ + *wasm, + "/bin/sh", + "../configure", + *(["--host=wasm32"] if "wasm" in flags and not any(s.startswith("--host") for s in configure_args) else []), + *configure_args, + f"--prefix={prefix}", + ], + cwd=cwd, + ) -def run_cmake(arg1, cmake_args, cmake_dir=None, cwd=None): +def run_cmake(arg1, cmake_args: "list[str]", cmake_dir: Union[str, None] = None, cwd: Union[str, None] = None): if cmake_dir is None: P = ".." else: P = cmake_dir - + wasm = [] if "wasm" in flags: wasm.append("emcmake") - - run([*wasm, "cmake", P, *cmake_args, f"-DCMAKE_BUILD_TYPE={BUILD_CFG}", f"-DBUILD_SHARED_LIBS={OFF_ON[not BUILD_STATIC]}"], cwd=cwd) + + run( + [ + *wasm, + "cmake", + P, + *cmake_args, + f"-DCMAKE_BUILD_TYPE={BUILD_CFG}", + f"-DBUILD_SHARED_LIBS={OFF_ON[not BUILD_STATIC]}", + f"-DCMAKE_CXX_FLAGS='{os.environ['CXXFLAGS']}'", + f"-DCMAKE_C_FLAGS='{os.environ['CFLAGS']}'", + f"-DCMAKE_SHARED_LINKER_FLAGS={os.environ['LDFLAGS']}", + ], + cwd=cwd, + ) -def git_clone_or_pull_repository(clone_url, target_dir, revision=None): +def git_clone_or_pull_repository(clone_url: str, target_dir: str, revision: Union[str, None] = None) -> None: """Lazily clones the `git` repository denoted by `clone_url` into the `target_dir` or pulls latest changes if the `target_dir` exists (naively assumes that a working clone exists there) and optionally checks out a revision @@ -362,11 +444,35 @@ def git_clone_or_pull_repository(clone_url, target_dir, revision=None): run([git, "checkout", revision], cwd=target_dir) -def build_dependency(name, mode, build_tool_args, download_url, download_name, download_tool=download_tool_default, revision=None, patch=None, additional_files={}, no_append_name=False, **kwargs): +def build_dependency( + name: str, + mode: Literal[ + "cmake", + "autoconf", + "ctest", + "bjam", + ], + build_tool_args: "list[str]", + download_url: str, + download_name: str, + download_tool: Literal["py", "git"] = download_tool_default, + revision: "Union[str, None]" = None, + patch: "Union[str, list[str], None]" = None, + shell=None, + pre_compile_subs: "Sequence[tuple[str, str, str]]" = (), + additional_files: "Union[dict[str, str], None]" = None, + no_append_name=False, + **kwargs, +) -> None: """Handles building of dependencies with different tools (which are distinguished with the `mode` argument. `build_tool_args` is expected to be a list which is necessary in order to not mess up quoting of compiler and - linker flags.""" + linker flags. + + :param pre_compile_subs: A sequence of ``(fn, before, after)`` + :param additional_files: Mapping path->url. + :param kwargs: Additional ``mode`` related kwargs. + """ check_dir = os.path.join(DEPS_DIR, "install", name) if os.path.exists(check_dir): logger.info(f"Found existing {name}, skipping") @@ -374,27 +480,36 @@ def build_dependency(name, mode, build_tool_args, download_url, download_name, d build_dir = os.path.join(DEPS_DIR, "build") if not os.path.exists(build_dir): os.makedirs(build_dir) - + logger.info(f"\rFetching {name}... ") - + if download_tool == download_tool_py: if no_append_name: url = download_url else: url = os.path.join(download_url, download_name) - + download_path = os.path.join(build_dir, download_name) if not os.path.exists(download_path): - urlretrieve(url, os.path.join(build_dir, download_path)) + for _ in range(3): + try: + urlretrieve(url, os.path.join(build_dir, download_path)) + break + except ConnectionError as e: + print(e, "... retrying...") + time.sleep(30.0) + continue else: - logger.info(f"Download '{download_path}' already exists, assuming it's an undamaged download and that it has been extracted if possible, skipping") + logger.info( + f"Download '{download_path}' already exists, assuming it's an undamaged download and that it has been extracted if possible, skipping" + ) elif download_tool == download_tool_git: logger.info(f"\rChecking {name}... ") git_clone_or_pull_repository(download_url, target_dir=os.path.join(build_dir, download_name), revision=revision) else: raise ValueError(f"download tool '{download_tool}' is not supported") download_dir = os.path.join(build_dir, download_name) - + if os.path.isdir(download_dir): extract_dir_name = download_name extract_dir = os.path.join(build_dir, extract_dir_name) @@ -404,39 +519,51 @@ def build_dependency(name, mode, build_tool_args, download_url, download_name, d compr = "gz" elif download_name.endswith(".tar.bz2"): compr = "bz2" + elif download_name.endswith(".tar.xz"): + compr = "xz" else: raise RuntimeError("fix source for new download type") download_tarfile = tarfile.open(name=download_tarfile_path, mode=f"r:{compr}") # tarfile seriously doesn't have a function to retrieve the root directory more easily extract_dir_name = os.path.commonprefix([x for x in download_tarfile.getnames() if x != "."]) - #run([tar, "--exclude=\"*/*\"", "-tf", download_name], cwd=build_dir).strip() no longer works + # run([tar, "--exclude=\"*/*\"", "-tf", download_name], cwd=build_dir).strip() no longer works if extract_dir_name is None: - extract_dir_name = run([bash, "-c", f"tar -tf {download_name} 2> /dev/null | head -n 1 | cut -f1 -d /"], cwd=build_dir) + extract_dir_name = run( + [bash, "-c", f"tar -tf {download_name} 2> /dev/null | head -n 1 | cut -f1 -d /"], cwd=build_dir + ) extract_dir = os.path.join(build_dir, extract_dir_name) if not os.path.exists(extract_dir): run([tar, "-xf", download_name], cwd=build_dir) - - for path, url in additional_files.items(): - if not os.path.exists(path): - urlretrieve(url, os.path.join(extract_dir, path)) - + + if additional_files: + for path, url in additional_files.items(): + if not os.path.exists(path): + urlretrieve(url, os.path.join(extract_dir, path)) + if patch is not None: if isinstance(patch, str): patch = [patch] for p in patch: patch_abs = os.path.abspath(os.path.join(os.path.dirname(__file__), p)) if os.path.exists(patch_abs): - try: run(["patch", "-p1", "--batch", "--forward", "-i", patch_abs], cwd=extract_dir) + try: + run(["patch", "-p1", "--batch", "--forward", "-i", patch_abs], cwd=extract_dir) except Exception as e: # Assert that the patch has already been applied run(["patch", "-p1", "--batch", "--reverse", "--dry-run", "-i", patch_abs], cwd=extract_dir) - + + if shell is not None: + sp.run(shell, shell=True, check=True, cwd=extract_dir) + if mode == "ctest": - run(["ctest", "-S", "HDF5config.cmake,BUILD_GENERATOR=Unix", "-C", BUILD_CFG, "-V", "-O", "hdf5.log"], cwd=extract_dir) - run([tar, "-xf", kwargs["ctest_result"] + ".tar.gz"], cwd=os.path.join(extract_dir, 'build')) + run( + ["ctest", "-S", "HDF5config.cmake,BUILD_GENERATOR=Unix", "-C", BUILD_CFG, "-V", "-O", "hdf5.log"], + cwd=extract_dir, + ) + run([tar, "-xf", kwargs["ctest_result"] + ".tar.gz"], cwd=os.path.join(extract_dir, "build")) shutil.copytree( os.path.join(extract_dir, "build", kwargs["ctest_result"], kwargs["ctest_result_path"]), - os.path.join(DEPS_DIR, "install", name) + os.path.join(DEPS_DIR, "install", name), ) elif mode != "bjam": extract_build_dir = os.path.join(extract_dir, "build") @@ -451,23 +578,32 @@ def build_dependency(name, mode, build_tool_args, download_url, download_name, d run_cmake(name, build_tool_args, cwd=extract_build_dir) else: raise ValueError() + for fn, before, after in pre_compile_subs: + with open(os.path.join(extract_dir, fn), "r") as f: + s = f.read() + s = s.replace(before, after) + with open(os.path.join(extract_dir, fn), "w") as f: + f.write(s) logger.info(f"\rBuilding {name}... ") run([make, f"-j{IFCOS_NUM_BUILD_PROCS}", "VERBOSE=1"], cwd=extract_build_dir) logger.info(f"\rInstalling {name}... ") run([make, "install"], cwd=extract_build_dir) logger.info(f"\rInstalled {name} \n") - else: + else: # bjam logger.info(f"\rConfiguring {name}...") run([bash, "./bootstrap.sh"], cwd=extract_dir) logger.info(f"\rBuilding {name}... ") run(["./b2", f"-j{IFCOS_NUM_BUILD_PROCS}"] + build_tool_args, cwd=extract_dir, can_fail="wasm" in flags) logger.info(f"\rInstalling {name}... ") - shutil.copytree(os.path.join(extract_dir, "boost"), os.path.join(DEPS_DIR, "install", f"boost-{BOOST_VERSION}", "boost")) + shutil.copytree( + os.path.join(extract_dir, "boost"), os.path.join(DEPS_DIR, "install", f"boost-{BOOST_VERSION}", "boost") + ) logger.info(f"\rInstalled {name} \n") if "diskcleanup" in flags: shutil.rmtree(build_dir, ignore_errors=True) + cecho("Collecting dependencies:", GREEN) # Set compiler flags for 32bit builds on 64bit system @@ -478,9 +614,6 @@ ADDITIONAL_ARGS = [] if platform.system() == "Darwin": ADDITIONAL_ARGS = [f"-mmacosx-version-min={TOOLSET}"] + ADDITIONAL_ARGS -if "wasm" in flags: - ADDITIONAL_ARGS.extend(("-sWASM_BIGINT", "-fwasm-exceptions")) - # If the linker supports GC sections, set it up to reduce binary file size # -fPIC is required for the shared libraries to work @@ -491,7 +624,11 @@ CFLAGS = os.environ.get("CFLAGS", "") LDFLAGS = os.environ.get("LDFLAGS", "") ADDITIONAL_ARGS_STR = " ".join(ADDITIONAL_ARGS) -if "wasm" not in flags and sp.call([bash, "-c", "ld --gc-sections 2>&1 | grep -- --gc-sections &> /dev/null"]) != 0: + +if "wasm" in flags: + CFLAGS_MINIMAL = CXXFLAGS_MINIMAL = CFLAGS = CXXFLAGS = os.environ["SIDE_MODULE_CFLAGS"] + LDFLAGS = os.environ["SIDE_MODULE_LDFLAGS"] +elif sp.call([bash, "-c", "ld --gc-sections 2>&1 | grep -- --gc-sections &> /dev/null"]) != 0: CXXFLAGS_MINIMAL = f"{CXXFLAGS} {PIC} {ADDITIONAL_ARGS_STR}" CFLAGS_MINIMAL = f"{CFLAGS} {PIC} {ADDITIONAL_ARGS_STR}" if BUILD_STATIC: @@ -508,8 +645,8 @@ else: CXXFLAGS = f"{CXXFLAGS} {PIC} -fvisibility=hidden -fvisibility-inlines-hidden {ADDITIONAL_ARGS_STR}" CFLAGS = f"{CFLAGS} {PIC} -fvisibility=hidden -fvisibility-inlines-hidden {ADDITIONAL_ARGS_STR}" else: - CXXFLAGS=CXXFLAGS_MINIMAL - CFLAGS=CFLAGS_MINIMAL + CXXFLAGS = CXXFLAGS_MINIMAL + CFLAGS = CFLAGS_MINIMAL LDFLAGS = f"{LDFLAGS} {ADDITIONAL_ARGS_STR}" if "lto" in flags: @@ -517,6 +654,7 @@ if "lto" in flags: locals()[f] += f" -flto={IFCOS_NUM_BUILD_PROCS}" os.environ["CXXFLAGS"] = CXXFLAGS +os.environ["CPPFLAGS"] = CXXFLAGS os.environ["CFLAGS"] = CFLAGS os.environ["LDFLAGS"] = LDFLAGS @@ -524,7 +662,7 @@ os.environ["LDFLAGS"] = LDFLAGS # @tfk: this is no longer needed # build_dependency(name="cmake-%s" % (CMAKE_VERSION,), mode="autoconf", build_tool_args=[], download_url="https://cmake.org/files/v%s" % (CMAKE_VERSION_2,), download_name="cmake-%s.tar.gz" % (CMAKE_VERSION,)) -if 'hdf5' in targets: +if "hdf5" in targets: # not supported orig = [os.environ[f] for f in compiler_flags] for f in compiler_flags: @@ -538,12 +676,12 @@ if 'hdf5' in targets: download_url=f"https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-{HDF5_MAJOR}/hdf5-{HDF5_VERSION}/src/", download_name=f"CMake-hdf5-{HDF5_VERSION}.tar.gz", ctest_result=f"HDF5-{HDF5_VERSION}-{platform.system()}", - ctest_result_path=f"HDF_Group/HDF5/{HDF5_VERSION}" + ctest_result_path=f"HDF_Group/HDF5/{HDF5_VERSION}", ) - + for f, o in zip(compiler_flags, orig): os.environ[f] = o - + if "json" in targets: json_url = f"https://github.com/nlohmann/json/releases/download/{JSON_VERSION}/json.hpp" @@ -552,9 +690,11 @@ if "json" in targets: os.makedirs(os.path.dirname(json_install_path)) if not os.path.exists(json_install_path): urlretrieve(json_url, json_install_path) - + if "eigen" in targets: - git_clone_or_pull_repository("https://gitlab.com/libeigen/eigen.git", f"{DEPS_DIR}/install/eigen-3.3.9", revision="3.3.9") + git_clone_or_pull_repository( + "https://gitlab.com/libeigen/eigen.git", f"{DEPS_DIR}/install/eigen-3.3.9", revision="3.3.9" + ) if "pcre" in targets: build_dependency( @@ -562,7 +702,7 @@ if "pcre" in targets: mode="autoconf", build_tool_args=[DISABLE_FLAG], download_url=f"https://downloads.sourceforge.net/project/pcre/pcre/{PCRE_VERSION}/", - download_name=f"pcre-{PCRE_VERSION}.tar.bz2" + download_name=f"pcre-{PCRE_VERSION}.tar.bz2", ) # An issue exists with swig-1.3 and python >= 3.2 @@ -575,36 +715,34 @@ if "swig" in targets: download_url="https://github.com/swig/swig.git", download_name="swig", download_tool=download_tool_git, - revision=f"rel-{SWIG_VERSION}" + revision=f"rel-{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", + 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-11-1" + revision="VER-2-11-1", ) if USE_OCCT and "occ" in targets: patches = [] if OCCT_VERSION < "7.4": patches.append("./patches/occt/enable-exception-handling.patch") - + if OCCT_VERSION == "7.7.1": patches.append("./patches/occt/no_ExpToCasExe.patch") - + if OCCT_VERSION == "7.7.2": patches.append("./patches/occt/no_ExpToCasExe_7_7_2.patch") if OCCT_VERSION == "7.8.1": patches.append("./patches/occt/no_ExpToCasExe_7_8_1.patch") - + if "wasm" in flags: patches.append("./patches/occt/no_em_js.patch") @@ -616,13 +754,13 @@ if USE_OCCT and "occ" in targets: f"-DBUILD_LIBRARY_TYPE={LINK_TYPE_UCFIRST}", "-DBUILD_MODULE_Draw=0", "-DBUILD_RELEASE_DISABLE_EXCEPTIONS=Off", - f"-D3RDPARTY_FREETYPE_DIR={DEPS_DIR}/install/freetype" + f"-D3RDPARTY_FREETYPE_DIR={DEPS_DIR}/install/freetype", ], - download_url = "https://github.com/Open-Cascade-SAS/OCCT", - download_name = "occt", + download_url="https://github.com/Open-Cascade-SAS/OCCT", + download_name="occt", download_tool=download_tool_git, patch=patches, - revision="V" + OCCT_VERSION.replace('.', '_') + revision="V" + OCCT_VERSION.replace(".", "_"), ) elif "occ" in targets: build_dependency( @@ -635,12 +773,12 @@ elif "occ" in targets: "-DOCE_DISABLE_X11=ON", "-DOCE_VISUALISATION=OFF", "-DOCE_OCAF=OFF", - f"-DOCE_INSTALL_PREFIX={DEPS_DIR}/install/oce-{OCE_VERSION}" + f"-DOCE_INSTALL_PREFIX={DEPS_DIR}/install/oce-{OCE_VERSION}", ], download_url="https://github.com/tpaviot/oce/archive/", - download_name=f"OCE-{OCE_VERSION}.tar.gz" + download_name=f"OCE-{OCE_VERSION}.tar.gz", ) - + if "libxml2" in targets: build_dependency( f"libxml2-{LIBXML2_VERSION}", @@ -651,12 +789,12 @@ if "libxml2" in targets: DISABLE_FLAG, "--without-zlib", "--without-iconv", - "--without-lzma" + "--without-lzma", ], - download_url="ftp://xmlsoft.org/libxml2/", - download_name=f"libxml2-{LIBXML2_VERSION}.tar.gz" + download_url=f"https://download.gnome.org/sources/libxml2/{'.'.join(LIBXML2_VERSION.split('.')[0:2])}/", + download_name=f"libxml2-{LIBXML2_VERSION}.tar.xz", ) - + if "OpenCOLLADA" in targets: patches = ["./patches/opencollada/pr622_and_disable_subdirs.patch"] @@ -676,25 +814,27 @@ if "OpenCOLLADA" in targets: f"-DPCRE_INCLUDE_DIR={DEPS_DIR}/install/pcre-{PCRE_VERSION}/include", f"-DPCRE_PCREPOSIX_LIBRARY={DEPS_DIR}/install/pcre-{PCRE_VERSION}/lib/libpcreposix.{LIBRARY_EXT}", f"-DPCRE_PCRE_LIBRARY={DEPS_DIR}/install/pcre-{PCRE_VERSION}/lib/libpcre.{LIBRARY_EXT}", - f"-DCMAKE_INSTALL_PREFIX={DEPS_DIR}/install/OpenCOLLADA/" + f"-DCMAKE_INSTALL_PREFIX={DEPS_DIR}/install/OpenCOLLADA/", ], download_url="https://github.com/KhronosGroup/OpenCOLLADA.git", download_name="OpenCOLLADA", download_tool=download_tool_git, patch=patches, - revision=OPENCOLLADA_VERSION + revision=OPENCOLLADA_VERSION, ) if "python" in targets and not USE_CURRENT_PYTHON_VERSION and "wasm" not in flags: # Python should not be built with -fvisibility=hidden, from experience that introduces segfaults + OLD_CPP_FLAGS = os.environ["CPPFLAGS"] OLD_CXX_FLAGS = os.environ["CXXFLAGS"] OLD_C_FLAGS = os.environ["CFLAGS"] os.environ["CXXFLAGS"] = CXXFLAGS_MINIMAL + os.environ["CPPFLAGS"] = CXXFLAGS_MINIMAL os.environ["CFLAGS"] = CFLAGS_MINIMAL # On OSX a dynamic python library is built or it would not be compatible # with the system python because of some threading initialization - PYTHON_CONFIGURE_ARGS = [] + PYTHON_CONFIGURE_ARGS: "list[str]" = [] if platform.system() == "Darwin": PYTHON_CONFIGURE_ARGS = ["--enable-shared"] @@ -705,7 +845,7 @@ if "python" in targets and not USE_CURRENT_PYTHON_VERSION and "wasm" not in flag "autoconf", PYTHON_CONFIGURE_ARGS, f"http://www.python.org/ftp/python/{PYTHON_VERSION}/", - f"Python-{PYTHON_VERSION}.tgz" + f"Python-{PYTHON_VERSION}.tgz", ) except RuntimeError as e: # Sometimes setting up modules such as pip/lzma can cause @@ -714,11 +854,10 @@ if "python" in targets and not USE_CURRENT_PYTHON_VERSION and "wasm" not in flag # are installed correctly. This is all we need so we catch # the exception and only reraise if a partially successful # install is not detected. - if not os.path.exists( - os.path.join(DEPS_DIR, "install", f"python-{PYTHON_VERSION}") - ): + if not os.path.exists(os.path.join(DEPS_DIR, "install", f"python-{PYTHON_VERSION}")): raise e + os.environ["CPPFLAGS"] = OLD_CPP_FLAGS os.environ["CXXFLAGS"] = OLD_CXX_FLAGS os.environ["CFLAGS"] = OLD_C_FLAGS @@ -741,21 +880,27 @@ if "boost" in targets: "--with-filesystem", f"link={LINK_TYPE}", *toolset, - *map(str_concat("cxxflags"), CXXFLAGS.strip().split(' ')), - *map(str_concat("linkflags"), LDFLAGS.strip().split(' ')), - "stage", "-s", "NO_BZIP2=1"], + *map(str_concat("cxxflags"), CXXFLAGS.strip().split(" ")), + *map(str_concat("linkflags"), LDFLAGS.strip().split(" ")), + "stage", + "-s", + "NO_BZIP2=1", + ], download_url=BOOST_LOCATION, # don't remember what this is, but fail on 1.86 # patch="./patches/boost/boostorg_regex_62.patch", - download_name=f"boost-{BOOST_VERSION}-b2-nodocs.tar.gz" + download_name=f"boost-{BOOST_VERSION}-b2-nodocs.tar.gz", ) if "wasm" in flags: # only supported on nix for now - run(("find", ".", "-name", "*.bc", "-exec", "bash", "-c", "emar q ${1%.bc}.a $1", "bash", "{}", ";"), cwd=f"{DEPS_DIR}/install/boost-{BOOST_VERSION}/lib") - + run( + ("find", ".", "-name", "*.bc", "-exec", "bash", "-c", "emar q ${1%.bc}.a $1", "bash", "{}", ";"), + cwd=f"{DEPS_DIR}/install/boost-{BOOST_VERSION}/lib", + ) + if "cgal" in targets: - gmp_args = [] - mpfr_args = [] + gmp_args: "list[str]" = [] + mpfr_args: "list[str]" = [] if "wasm" in flags: gmp_args.extend(("--disable-assembly", "--host", "none", "--enable-cxx")) mpfr_args.extend(("--host", "none")) @@ -764,49 +909,49 @@ if "cgal" in targets: name=f"gmp-{GMP_VERSION}", mode="autoconf", build_tool_args=[ENABLE_FLAG, DISABLE_FLAG, "--with-pic", *gmp_args], + pre_compile_subs=( + [("build/config.h", "HAVE_OBSTACK_VPRINTF 1", "HAVE_OBSTACK_VPRINTF 0")] if "wasm" in flags else [] + ), download_url="https://ftp.gnu.org/gnu/gmp/", - download_name=f"gmp-{GMP_VERSION}.tar.bz2" + download_name=f"gmp-{GMP_VERSION}.tar.bz2", ) - + build_dependency( name=f"mpfr-{MPFR_VERSION}", mode="autoconf", build_tool_args=[ENABLE_FLAG, DISABLE_FLAG, *mpfr_args, f"--with-gmp={DEPS_DIR}/install/gmp-{GMP_VERSION}"], download_url=f"http://www.mpfr.org/mpfr-{MPFR_VERSION}/", - download_name=f"mpfr-{MPFR_VERSION}.tar.bz2" + download_name=f"mpfr-{MPFR_VERSION}.tar.bz2", ) - + build_dependency( name=f"cgal-{CGAL_VERSION}", mode="cmake", build_tool_args=[ f"-DGMP_LIBRARIES={DEPS_DIR}/install/gmp-{GMP_VERSION}/lib/libgmp.{LIBRARY_EXT}", f"-DGMP_INCLUDE_DIR={DEPS_DIR}/install/gmp-{GMP_VERSION}/include", - f"-DMPFR_LIBRARIES={DEPS_DIR}/install/mpfr-{MPFR_VERSION}/lib/libmpfr.{LIBRARY_EXT}" , + f"-DMPFR_LIBRARIES={DEPS_DIR}/install/mpfr-{MPFR_VERSION}/lib/libmpfr.{LIBRARY_EXT}", 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}/", - "-DCGAL_HEADER_ONLY=On", - "-DBUILD_SHARED_LIBS=Off" + "-DCGAL_HEADER_ONLY=On", + "-DBUILD_SHARED_LIBS=Off", ], download_url="https://github.com/CGAL/cgal.git", download_name="cgal", download_tool=download_tool_git, - revision=f"v{CGAL_VERSION}" + revision=CGAL_VERSION, ) if "usd" in targets: build_dependency( name=f"oneTBB-{TBB_VERSION}", mode="cmake", - build_tool_args=[ - f"-DCMAKE_INSTALL_PREFIX={DEPS_DIR}/install/tbb-{TBB_VERSION}", - f"-DTBB_TEST=OFF" - ], + build_tool_args=[f"-DCMAKE_INSTALL_PREFIX={DEPS_DIR}/install/tbb-{TBB_VERSION}", f"-DTBB_TEST=OFF"], download_url="https://github.com/oneapi-src/oneTBB", download_name="oneTBB", download_tool=download_tool_git, - revision=f"v{TBB_VERSION}" + revision=f"v{TBB_VERSION}", ) build_dependency( @@ -822,12 +967,12 @@ if "usd" in targets: f"-DPXR_BUILD_TUTORIALS=FALSE", f"-DPXR_BUILD_EXAMPLES=FALSE", f"-DPXR_BUILD_USD_TOOLS=FALSE", - f"-DPXR_BUILD_TESTS=FALSE" + f"-DPXR_BUILD_TESTS=FALSE", ], download_url="https://github.com/PixarAnimationStudios/USD", download_name="USD", download_tool=download_tool_git, - revision=f"v{USD_VERSION}" + revision=f"v{USD_VERSION}", ) cecho("Building IfcOpenShell:", GREEN) @@ -842,17 +987,19 @@ os.makedirs(executables_dir, exist_ok=True) cmake_args = [ - "-DUSE_MMAP=" "OFF", - "-DBUILD_EXAMPLES=" "OFF", - "-DBUILD_SHARED_LIBS=" +OFF_ON[not BUILD_STATIC], - "-DBOOST_ROOT=" f"{DEPS_DIR}/install/boost-{BOOST_VERSION}", - "-DGLTF_SUPPORT=" "ON", - "-DJSON_INCLUDE_DIR=" f"{DEPS_DIR}/install/json", - "-DEIGEN_DIR=" f"{DEPS_DIR}/install/eigen-3.3.9", - "-DBoost_NO_BOOST_CMAKE=" "On", - "-DADD_COMMIT_SHA=" +("On" if ADD_COMMIT_SHA else "Off"), - "-DVERSION_OVERRIDE=" +("On" if ADD_COMMIT_SHA else "Off") + "-DCMAKE_CXX_STANDARD=17", + "-DUSE_MMAP=OFF", + "-DBUILD_EXAMPLES=OFF", + "-DBUILD_SHARED_LIBS=" + OFF_ON[not BUILD_STATIC], + f"-DBOOST_ROOT={DEPS_DIR}/install/boost-{BOOST_VERSION}", + "-DGLTF_SUPPORT=ON", + f"-DJSON_INCLUDE_DIR={DEPS_DIR}/install/json", + f"-DEIGEN_DIR={DEPS_DIR}/install/eigen-3.3.9", + "-DBoost_NO_BOOST_CMAKE=On", + "-DADD_COMMIT_SHA=" + ("On" if ADD_COMMIT_SHA else "Off"), + "-DVERSION_OVERRIDE=" + ("On" if ADD_COMMIT_SHA else "Off"), ] +"""Default CMake args to use for all CMake configs.""" if "wasm" in flags: # Boost is built by the build script so should not be found @@ -860,77 +1007,81 @@ if "wasm" in flags: cmake_args.append("-DWASM_BUILD=On") if "cgal" in targets: - cmake_args.extend([ - "-DCGAL_INCLUDE_DIR=" f"{DEPS_DIR}/install/cgal-{CGAL_VERSION}/include", - "-DGMP_INCLUDE_DIR=" f"{DEPS_DIR}/install/gmp-{GMP_VERSION}/include", - "-DGMP_LIBRARY_DIR=" f"{DEPS_DIR}/install/gmp-{GMP_VERSION}/lib", - "-DMPFR_INCLUDE_DIR=" f"{DEPS_DIR}/install/mpfr-{MPFR_VERSION}/include", - "-DMPFR_LIBRARY_DIR=" f"{DEPS_DIR}/install/mpfr-{MPFR_VERSION}/lib", - ]) - -if "occ" in targets and USE_OCCT: - occ_include_dir = f"{DEPS_DIR}/install/occt-{OCCT_VERSION}/include/opencascade" - occ_library_dir = f"{DEPS_DIR}/install/occt-{OCCT_VERSION}/lib" - cmake_args.extend([ - "-DOCC_INCLUDE_DIR=" +occ_include_dir, - "-DOCC_LIBRARY_DIR=" +occ_library_dir - ]) - -elif "occ" in targets: - occ_include_dir = f"{DEPS_DIR}/install/oce-{OCE_VERSION}/include/oce" - occ_library_dir = f"{DEPS_DIR}/install/oce-{OCE_VERSION}/lib" - cmake_args.extend([ - "-DOCC_INCLUDE_DIR=" +occ_include_dir, - "-DOCC_LIBRARY_DIR=" +occ_library_dir - ]) - -if "OpenCOLLADA" in targets: - cmake_args.extend([ - "-DOPENCOLLADA_INCLUDE_DIR=" f"{DEPS_DIR}/install/OpenCOLLADA/include/opencollada", - "-DOPENCOLLADA_LIBRARY_DIR=" f"{DEPS_DIR}/install/OpenCOLLADA/lib/opencollada" - ]) -else: - cmake_args.extend([ - "-DCOLLADA_SUPPORT=" "Off", - ]) - -if "pcre" in targets: - cmake_args.append( - "-DPCRE_LIBRARY_DIR=" f"{DEPS_DIR}/install/pcre-{PCRE_VERSION}/lib" + cmake_args.extend( + [ + "-DCGAL_INCLUDE_DIR=" f"{DEPS_DIR}/install/cgal-{CGAL_VERSION}/include", + "-DGMP_INCLUDE_DIR=" f"{DEPS_DIR}/install/gmp-{GMP_VERSION}/include", + "-DGMP_LIBRARY_DIR=" f"{DEPS_DIR}/install/gmp-{GMP_VERSION}/lib", + "-DMPFR_INCLUDE_DIR=" f"{DEPS_DIR}/install/mpfr-{MPFR_VERSION}/include", + "-DMPFR_LIBRARY_DIR=" f"{DEPS_DIR}/install/mpfr-{MPFR_VERSION}/lib", + ] ) +if "occ" in targets and USE_OCCT: + occ_include_dir = f"{DEPS_DIR}/install/occt-{OCCT_VERSION}/include/opencascade" + occ_library_dir = f"{DEPS_DIR}/install/occt-{OCCT_VERSION}/lib" + cmake_args.extend(["-DOCC_INCLUDE_DIR=" + occ_include_dir, "-DOCC_LIBRARY_DIR=" + occ_library_dir]) + +elif "occ" in targets: + occ_include_dir = f"{DEPS_DIR}/install/oce-{OCE_VERSION}/include/oce" + occ_library_dir = f"{DEPS_DIR}/install/oce-{OCE_VERSION}/lib" + cmake_args.extend(["-DOCC_INCLUDE_DIR=" + occ_include_dir, "-DOCC_LIBRARY_DIR=" + occ_library_dir]) + +if "OpenCOLLADA" in targets: + cmake_args.extend( + [ + "-DOPENCOLLADA_INCLUDE_DIR=" f"{DEPS_DIR}/install/OpenCOLLADA/include/opencollada", + "-DOPENCOLLADA_LIBRARY_DIR=" f"{DEPS_DIR}/install/OpenCOLLADA/lib/opencollada", + ] + ) +else: + cmake_args.extend( + [ + "-DCOLLADA_SUPPORT=" "Off", + ] + ) + +if "pcre" in targets: + cmake_args.append("-DPCRE_LIBRARY_DIR=" f"{DEPS_DIR}/install/pcre-{PCRE_VERSION}/lib") + if "libxml2" in targets: - cmake_args.extend([ - "-DLIBXML2_INCLUDE_DIR=" f"{DEPS_DIR}/install/libxml2-{LIBXML2_VERSION}/include/libxml2", - "-DLIBXML2_LIBRARIES=" f"{DEPS_DIR}/install/libxml2-{LIBXML2_VERSION}/lib/libxml2.{LIBRARY_EXT}" - ]) + cmake_args.extend( + [ + "-DLIBXML2_INCLUDE_DIR=" f"{DEPS_DIR}/install/libxml2-{LIBXML2_VERSION}/include/libxml2", + "-DLIBXML2_LIBRARIES=" f"{DEPS_DIR}/install/libxml2-{LIBXML2_VERSION}/lib/libxml2.{LIBRARY_EXT}", + ] + ) if "hdf5" in targets: - cmake_args.extend([ - "-DHDF5_INCLUDE_DIR=" f"{DEPS_DIR}/install/hdf5-{HDF5_VERSION}/include", - "-DHDF5_LIBRARY_DIR=" f"{DEPS_DIR}/install/hdf5-{HDF5_VERSION}/lib" - ]) + cmake_args.extend( + [ + "-DHDF5_INCLUDE_DIR=" f"{DEPS_DIR}/install/hdf5-{HDF5_VERSION}/include", + "-DHDF5_LIBRARY_DIR=" f"{DEPS_DIR}/install/hdf5-{HDF5_VERSION}/lib", + ] + ) else: cmake_args.append("-DHDF5_SUPPORT=Off") if "usd" in targets: - cmake_args.extend([ - "-DUSD_SUPPORT=" "On", - "-DUSD_INCLUDE_DIR=" f"{DEPS_DIR}/install/usd-{USD_VERSION}/include", - "-DUSD_LIBRARY_DIR=" f"{DEPS_DIR}/install/usd-{USD_VERSION}/lib" - ]) + cmake_args.extend( + [ + "-DUSD_SUPPORT=" "On", + "-DUSD_INCLUDE_DIR=" f"{DEPS_DIR}/install/usd-{USD_VERSION}/include", + "-DUSD_LIBRARY_DIR=" f"{DEPS_DIR}/install/usd-{USD_VERSION}/lib", + ] + ) if not explicit_targets or {"IfcGeom", "IfcConvert", "IfcGeomServer"} & set(explicit_targets): logger.info("\rConfiguring executables...") exec_args = [ - "-DBUILD_IFCGEOM=" +OFF_ON["IfcGeom" in targets], - "-DBUILD_GEOMSERVER=" +OFF_ON["IfcGeomServer" in targets], - "-DBUILD_CONVERT=" +OFF_ON["IfcConvert" in targets], - "-DBUILD_IFCPYTHON=" "OFF", - "-DCMAKE_INSTALL_PREFIX=" f"{DEPS_DIR}/install/ifcopenshell", + "-DBUILD_IFCGEOM=" + OFF_ON["IfcGeom" in targets], + "-DBUILD_GEOMSERVER=" + OFF_ON["IfcGeomServer" in targets], + "-DBUILD_CONVERT=" + OFF_ON["IfcConvert" in targets], + "-DBUILD_IFCPYTHON=" "OFF", + "-DCMAKE_INSTALL_PREFIX=" f"{DEPS_DIR}/install/ifcopenshell", ] - + run_cmake("", exec_args + cmake_args, cmake_dir=CMAKE_DIR, cwd=executables_dir) logger.info("\rBuilding executables... ") @@ -943,10 +1094,11 @@ if "IfcOpenShell-Python" in targets: ADDITIONAL_ARGS = "" if platform.system() == "Darwin": ADDITIONAL_ARGS = "-Wl,-flat_namespace,-undefined,suppress" - + if "wasm" in flags: ADDITIONAL_ARGS = f"-Wl,-undefined,suppress -sSIDE_MODULE=2 -sEXPORTED_FUNCTIONS=_PyInit__ifcopenshell_wrapper" - + + os.environ["CPPFLAGS"] = f"{CXXFLAGS_MINIMAL} {ADDITIONAL_ARGS}" os.environ["CXXFLAGS"] = f"{CXXFLAGS_MINIMAL} {ADDITIONAL_ARGS}" os.environ["CFLAGS"] = f"{CFLAGS_MINIMAL} {ADDITIONAL_ARGS}" os.environ["LDFLAGS"] = f"{LDFLAGS} {ADDITIONAL_ARGS}" @@ -954,7 +1106,12 @@ if "IfcOpenShell-Python" in targets: python_dir = os.path.join(IFCOS_DIR, "pythonwrapper") os.makedirs(python_dir, exist_ok=True) - def compile_python_wrapper(python_version, python_library, python_include, python_executable): + def compile_python_wrapper( + python_version: str, python_library: str, python_include: str, python_executable: Union[str, None] + ) -> Union[str, None]: + """ + :return: Path to module dir if ``python_executable`` was provided, otherwise ``None``. + """ logger.info(f"\rConfiguring python {python_version} wrapper...") cache_path = os.path.join(python_dir, "CMakeCache.txt") @@ -967,17 +1124,30 @@ if "IfcOpenShell-Python" in targets: if "swig" in targets: swig_when_built.append(f"-DSWIG_EXECUTABLE={DEPS_DIR}/install/swig/bin/swig") - run_cmake("", - cmake_args + [ - "-DPYTHON_LIBRARY=" +python_library, + run_cmake( + "", + cmake_args + + [ + "-DPYTHON_LIBRARY=" + python_library, *([f"-DPYTHON_EXECUTABLE={python_executable}"] if python_executable else []), # *([f"-DPYTHON_MODULE_INSTALL_DIR={os.environ['PYTHONPATH']}/ifcopenshell"] if "wasm" in flags else []), - *(["-DPYTHON_MODULE_INSTALL_DIR="+os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "package"))] if "wasm" in flags else []), - "-DPYTHON_INCLUDE_DIR=" +python_include, - "-DCMAKE_INSTALL_PREFIX=" f"{DEPS_DIR}/install/ifcopenshell/tmp", - "-DUSERSPACE_PYTHON_PREFIX=" +["Off", "On"][os.environ.get("PYTHON_USER_SITE", "").lower() in {"1", "on", "true"}], - *swig_when_built], - cmake_dir=CMAKE_DIR, cwd=python_dir) + *( + [ + "-DPYTHON_MODULE_INSTALL_DIR=" + + os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "package")) + ] + if "wasm" in flags + else [] + ), + "-DPYTHON_INCLUDE_DIR=" + python_include, + "-DCMAKE_INSTALL_PREFIX=" f"{DEPS_DIR}/install/ifcopenshell/tmp", + "-DUSERSPACE_PYTHON_PREFIX=" + + ["Off", "On"][os.environ.get("PYTHON_USER_SITE", "").lower() in {"1", "on", "true"}], + *swig_when_built, + ], + cmake_dir=CMAKE_DIR, + cwd=python_dir, + ) logger.info(f"\rBuilding python {python_version} wrapper... ") @@ -985,14 +1155,16 @@ if "IfcOpenShell-Python" in targets: run([make, "install/local"], cwd=os.path.join(python_dir, "ifcwrap")) if python_executable: - module_dir = os.path.dirname(run([python_executable, "-c", "import inspect, ifcopenshell; print(inspect.getfile(ifcopenshell))"])) + module_dir = os.path.dirname( + run([python_executable, "-c", "import inspect, ifcopenshell; print(inspect.getfile(ifcopenshell))"]) + ) if platform.system() != "Darwin": if BUILD_CFG == "Release": # TODO: This symbol name depends on the Python version? so = glob.glob(os.path.join(module_dir, "_ifcopenshell_wrapper*.so"))[0] if "wasm" in flags: - run(['wasm-strip', so, '-k', "dylink.0"]) + run(["wasm-strip", so, "-k", "dylink.0"]) else: run([strip, "-s", "-K", "PyInit__ifcopenshell_wrapper", so], cwd=module_dir) @@ -1002,20 +1174,17 @@ if "IfcOpenShell-Python" in targets: compile_python_wrapper( f"{os.environ['PYMAJOR']}.{os.environ['PYMINOR']}.{os.environ['PYMICRO']}", f"{os.environ['TARGETINSTALLDIR']}/lib/libpython{os.environ['PYMAJOR']}.{os.environ['PYMINOR']}.a", - os.environ['PYTHONINCLUDE'], - None + os.environ["PYTHONINCLUDE"], + None, ) - + elif USE_CURRENT_PYTHON_VERSION: python_info = sysconfig.get_paths() - py_path_components = [ - sysconfig.get_config_var('LIBDIR'), - sysconfig.get_config_var("INSTSONAME") - ] + py_path_components = [sysconfig.get_config_var("LIBDIR"), sysconfig.get_config_var("INSTSONAME")] - if sysconfig.get_config_var('multiarchsubdir'): - py_path_components.insert(1, sysconfig.get_config_var('multiarchsubdir').replace("/", "")) + if sysconfig.get_config_var("multiarchsubdir"): + py_path_components.insert(1, sysconfig.get_config_var("multiarchsubdir").replace("/", "")) python_lib = os.path.join(*py_path_components) @@ -1024,9 +1193,12 @@ if "IfcOpenShell-Python" in targets: for python_version in PYTHON_VERSIONS: python_library = run([bash, "-c", f"ls {DEPS_DIR}/install/python-{python_version}/lib/libpython*.*"]) python_include = run([bash, "-c", f"ls -d {DEPS_DIR}/install/python-{python_version}/include/python*"]) - python_executable = os.path.join(DEPS_DIR, "install", f"python-{python_version}", "bin", f"python{python_version[0]}") + python_executable = os.path.join( + DEPS_DIR, "install", f"python-{python_version}", "bin", f"python{python_version[0]}" + ) module_dir = compile_python_wrapper(python_version, python_library, python_include, python_executable) + assert module_dir run([cp, "-R", module_dir, os.path.join(DEPS_DIR, "install", "ifcopenshell", f"python-{python_version}")]) logger.info("\rBuilt IfcOpenShell...\n\n") diff --git a/pyodide/meta.yaml b/pyodide/meta.yaml index b3b3be0187..9e8acd5512 100644 --- a/pyodide/meta.yaml +++ b/pyodide/meta.yaml @@ -7,7 +7,7 @@ source: build: script: | - BUILD_CFG=Release python nix/build-all.py --without-hdf5 --without-opencollada --without-swig --without-pcre -v --wasm --py312 IfcOpenShell-Python + BUILD_CFG=Release python nix/build-all.py --without-hdf5 --without-opencollada --without-swig --without-pcre -v --wasm --py313 IfcOpenShell-Python mv package/ifcopenshell . cp pyodide/setup.py . diff --git a/pyproject.toml b/pyproject.toml index 45a957cf41..e3f82db534 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,28 +1,8 @@ [tool.black] line-length = 120 include = ''' - src/( - bcf - |bcfserver - |bonsai - |bsdd - |foundationserver - |ifc2ca - |ifc4d - |ifc5d - |ifcbimtester - |ifcblender - |ifccityjson - |ifcclash - |ifccsv - |ifcdiff - |ifcfm - |ifcpatch - |ifctester - |ifcopenshell-python - |ifcsverchok - |opencdeserver - )/.*.py$ + src/.*.pyi?$ + |nix/.*.pyi?$ ''' extend-exclude = ''' src/ifcopenshell-python/ifcopenshell/express/* @@ -30,8 +10,57 @@ extend-exclude = ''' |src/ifcopenshell-python/ifcopenshell/simple_spf/* |src/ifc2ca/templates/* |src/ifcconvert/cityjson/* + |src/svgfill + |src/exterior-shell-extractor + |src/pyodide ''' [tool.pyright] reportInvalidTypeForm = false disableBytesTypePromotions = true +reportUnnecessaryTypeIgnoreComment = true + +# Define here general ruff settings, +# then they will be inherited projects .toml files. +# This allows using assuming different Python version for different projects. +[tool.ruff] +exclude = [ + # Submodules. + "src/ifcconvert/cityjson", + "src/ifcopenshell-python/ifcopenshell/express", + "src/ifcopenshell-python/ifcopenshell/mvd", + "src/ifcopenshell-python/ifcopenshell/simple_spf", + "src/svgfill", + # + # Unformatted. + "src/exterior-shell-extractor", + # Incompatible with linter. + "src/ifc2ca/templates", +] +[tool.ruff.lint] +select = [ + # Default Ruff rules. + # "E4", # imports + # "E7", # statements + "E9", # io errors + # "F", # pyflakes + # + "FA", # future annotations + "UP", # pyupgrade + "RUF015", # next() > list_comprehension[0] + "RUF022", # sort __all__ +] +ignore = [ + "FA100", # Conflicts with Blender using annotations for props definitions. + # Maybe will enable later: + "UP007", # Optional to X | Y + "UP045", # Optional to X | None + "UP015", # Unnecessary mode argument + "UP028", # yield for -> yield from + "UP030", # implicit references for positional format fields + "UP031", # Replace % with .format + "UP032", # Replace .format with f-string + + # Deprecated Ruff rules. + "UP038", # Use X | Y in isinstance +] diff --git a/src/bcf/bcf/agnostic/extensions.py b/src/bcf/bcf/agnostic/extensions.py index c5d4a7f556..20ecd621d8 100644 --- a/src/bcf/bcf/agnostic/extensions.py +++ b/src/bcf/bcf/agnostic/extensions.py @@ -20,7 +20,7 @@ def get_extensions_attributes(extensions: Extensions) -> dict[str, AttributeData - subattribute name""" possible_attributes = {} for field in fields(type(extensions)): - field_type = field.type.__args__[0] # type: ignore [reportAttributeAccessIssue] + field_type = field.type.__args__[0] # pyright: ignore [reportAttributeAccessIssue] subfield = next(iter(fields(field_type))) xsd_name = subfield.metadata["name"] possible_attributes[field.name] = AttributeData(field_type, subfield.name, xsd_name) diff --git a/src/bcf/bcf/inmemory_zipfile.py b/src/bcf/bcf/inmemory_zipfile.py index 2a4d4117ce..8bcbbc6cf8 100644 --- a/src/bcf/bcf/inmemory_zipfile.py +++ b/src/bcf/bcf/inmemory_zipfile.py @@ -6,6 +6,7 @@ Copyright (c) 2017-2020 Anthon van der Neut, Ruamel bvba original idea from https://stackoverflow.com/a/19722365/1307905 """ +from __future__ import annotations import zipfile from io import BytesIO from os import PathLike @@ -47,7 +48,7 @@ class InMemoryZipFile: def data(self) -> bytes: return self.in_memory_data.getvalue() - def __enter__(self) -> "InMemoryZipFile": + def __enter__(self) -> InMemoryZipFile: return self def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None: diff --git a/src/bcf/bcf/v2/bcfxml.py b/src/bcf/bcf/v2/bcfxml.py index b15199f4dc..039f1cbe09 100644 --- a/src/bcf/bcf/v2/bcfxml.py +++ b/src/bcf/bcf/v2/bcfxml.py @@ -1,5 +1,6 @@ """BCF XML V2 handler.""" +from __future__ import annotations import uuid import warnings import zipfile @@ -31,7 +32,7 @@ class BcfXml: self._extension_schema: Optional[bytes] = None self._zip_file = self._load_zip_file() - def __enter__(self) -> "BcfXml": + def __enter__(self) -> BcfXml: return self def __exit__(self, *args: Any) -> None: @@ -99,7 +100,7 @@ class BcfXml: extensions = mdl_extensions.Extensions() xs = "{http://www.w3.org/2001/XMLSchema}" - root = etree.parse(io.BytesIO((self.extension_schema))) + root = etree.parse(io.BytesIO(self.extension_schema)) attrs = bcf.agnostic.extensions.get_extensions_attributes(extensions) xsd_to_attrs = {v.subattr_xsd_name: k for k, v in attrs.items()} @@ -148,7 +149,7 @@ class BcfXml: return topics @classmethod - def load(cls, filename: Path, xml_handler: Optional[AbstractXmlParserSerializer] = None) -> Optional["BcfXml"]: + def load(cls, filename: Path, xml_handler: Optional[AbstractXmlParserSerializer] = None) -> Optional[BcfXml]: """ Create a BcfXml object from a file. @@ -172,7 +173,7 @@ class BcfXml: cls, project_name: Optional[str] = None, xml_handler: Optional[AbstractXmlParserSerializer] = None, - ) -> "BcfXml": + ) -> BcfXml: """ Create a new BcfXml object. @@ -261,7 +262,7 @@ class BcfXml: ) # region Deprecated methods - def new_project(self) -> "BcfXml": + def new_project(self) -> BcfXml: """Deprecated method.""" warnings.warn("new_project is deprecated, use create_new instead.", DeprecationWarning) return self.create_new() diff --git a/src/bcf/bcf/v2/model/__init__.py b/src/bcf/bcf/v2/model/__init__.py index 3bb55fd922..fa66907968 100644 --- a/src/bcf/bcf/v2/model/__init__.py +++ b/src/bcf/bcf/v2/model/__init__.py @@ -36,20 +36,10 @@ from bcf.v2.model.visinfo import ( __all__ = [ "BimSnippet", - "Comment", - "CommentViewpoint", - "Header", - "HeaderFile", - "Markup", - "Topic", - "TopicDocumentReference", - "TopicRelatedTopic", - "ViewPoint", - "Project", - "ProjectExtension", - "Version", "BitmapFormat", "ClippingPlane", + "Comment", + "CommentViewpoint", "Component", "ComponentColoring", "ComponentColoringColor", @@ -58,10 +48,20 @@ __all__ = [ "ComponentVisibilityExceptions", "Components", "Direction", + "Header", + "HeaderFile", "Line", + "Markup", "OrthogonalCamera", "PerspectiveCamera", "Point", + "Project", + "ProjectExtension", + "Topic", + "TopicDocumentReference", + "TopicRelatedTopic", + "Version", + "ViewPoint", "ViewSetupHints", "VisualizationInfo", "VisualizationInfoBitmap", diff --git a/src/bcf/bcf/v2/model/extensions.py b/src/bcf/bcf/v2/model/extensions.py index fb25a47c64..bf28512100 100644 --- a/src/bcf/bcf/v2/model/extensions.py +++ b/src/bcf/bcf/v2/model/extensions.py @@ -14,16 +14,20 @@ # Currently extensions support for v2 is only read-only. +import sys from dataclasses import dataclass, field, fields -from typing import List, NamedTuple, Optional +from typing import Optional -@dataclass(slots=True, kw_only=True) +DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} + + +@dataclass(**DATACLASS_KWARGS) class ExtensionsPriorities: class Meta: global_type = False - priority: List[str] = field( + priority: list[str] = field( default_factory=list, metadata={ "name": "Priority", @@ -35,12 +39,12 @@ class ExtensionsPriorities: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ExtensionsSnippetTypes: class Meta: global_type = False - snippet_type: List[str] = field( + snippet_type: list[str] = field( default_factory=list, metadata={ "name": "SnippetType", @@ -52,12 +56,12 @@ class ExtensionsSnippetTypes: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ExtensionsStages: class Meta: global_type = False - stage: List[str] = field( + stage: list[str] = field( default_factory=list, metadata={ "name": "Stage", @@ -69,12 +73,12 @@ class ExtensionsStages: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ExtensionsTopicLabels: class Meta: global_type = False - topic_label: List[str] = field( + topic_label: list[str] = field( default_factory=list, metadata={ "name": "TopicLabel", @@ -86,12 +90,12 @@ class ExtensionsTopicLabels: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ExtensionsTopicStatuses: class Meta: global_type = False - topic_status: List[str] = field( + topic_status: list[str] = field( default_factory=list, metadata={ "name": "TopicStatus", @@ -103,12 +107,12 @@ class ExtensionsTopicStatuses: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ExtensionsTopicTypes: class Meta: global_type = False - topic_type: List[str] = field( + topic_type: list[str] = field( default_factory=list, metadata={ "name": "TopicType", @@ -120,12 +124,12 @@ class ExtensionsTopicTypes: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ExtensionsUsers: class Meta: global_type = False - user: List[str] = field( + user: list[str] = field( default_factory=list, metadata={ "name": "UserIdType", @@ -137,7 +141,7 @@ class ExtensionsUsers: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) 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 0b8fd987aa..f91d8fe8dc 100644 --- a/src/bcf/bcf/v2/model/markup.py +++ b/src/bcf/bcf/v2/model/markup.py @@ -1,10 +1,13 @@ +import sys from dataclasses import dataclass, field -from typing import List, Optional +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(slots=True, kw_only=True) + +@dataclass(**DATACLASS_KWARGS) class BimSnippet: reference: str = field( metadata={ @@ -38,7 +41,7 @@ class BimSnippet: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class CommentViewpoint: class Meta: global_type = False @@ -53,7 +56,7 @@ class CommentViewpoint: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class HeaderFile: class Meta: global_type = False @@ -109,7 +112,7 @@ class HeaderFile: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class TopicDocumentReference: class Meta: global_type = False @@ -147,7 +150,7 @@ class TopicDocumentReference: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class TopicRelatedTopic: class Meta: global_type = False @@ -162,7 +165,7 @@ class TopicRelatedTopic: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ViewPoint: viewpoint: Optional[str] = field( default=None, @@ -198,7 +201,7 @@ class ViewPoint: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Comment: date: XmlDateTime = field( metadata={ @@ -258,9 +261,9 @@ class Comment: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Header: - file: List[HeaderFile] = field( + file: list[HeaderFile] = field( default_factory=list, metadata={ "name": "File", @@ -271,9 +274,9 @@ class Header: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Topic: - reference_link: List[str] = field( + reference_link: list[str] = field( default_factory=list, metadata={ "name": "ReferenceLink", @@ -305,7 +308,7 @@ class Topic: "namespace": "", }, ) - labels: List[str] = field( + labels: list[str] = field( default_factory=list, metadata={ "name": "Labels", @@ -385,7 +388,7 @@ class Topic: "namespace": "", }, ) - document_reference: List[TopicDocumentReference] = field( + document_reference: list[TopicDocumentReference] = field( default_factory=list, metadata={ "name": "DocumentReference", @@ -393,7 +396,7 @@ class Topic: "namespace": "", }, ) - related_topic: List[TopicRelatedTopic] = field( + related_topic: list[TopicRelatedTopic] = field( default_factory=list, metadata={ "name": "RelatedTopic", @@ -425,7 +428,7 @@ class Topic: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Markup: header: Optional[Header] = field( default=None, @@ -443,7 +446,7 @@ class Markup: "required": True, } ) - comment: List[Comment] = field( + comment: list[Comment] = field( default_factory=list, metadata={ "name": "Comment", @@ -451,7 +454,7 @@ class Markup: "namespace": "", }, ) - viewpoints: List[ViewPoint] = field( + viewpoints: list[ViewPoint] = field( default_factory=list, metadata={ "name": "Viewpoints", diff --git a/src/bcf/bcf/v2/model/project.py b/src/bcf/bcf/v2/model/project.py index e86fb9b009..a27afb7cd6 100644 --- a/src/bcf/bcf/v2/model/project.py +++ b/src/bcf/bcf/v2/model/project.py @@ -1,8 +1,11 @@ +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(slots=True, kw_only=True) + +@dataclass(**DATACLASS_KWARGS) class Project: name: Optional[str] = field( default=None, @@ -21,7 +24,7 @@ class Project: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) 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 9f55ad5bf9..ea9331bc36 100644 --- a/src/bcf/bcf/v2/model/version.py +++ b/src/bcf/bcf/v2/model/version.py @@ -1,8 +1,11 @@ +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(slots=True, kw_only=True) + +@dataclass(**DATACLASS_KWARGS) 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 e1f13d3a37..3615609881 100644 --- a/src/bcf/bcf/v2/model/visinfo.py +++ b/src/bcf/bcf/v2/model/visinfo.py @@ -1,6 +1,9 @@ +import sys from dataclasses import dataclass, field from enum import Enum -from typing import List, Optional +from typing import Optional + +DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} class BitmapFormat(Enum): @@ -8,7 +11,7 @@ class BitmapFormat(Enum): JPG = "JPG" -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Component: originating_system: Optional[str] = field( default=None, @@ -35,7 +38,7 @@ class Component: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Direction: x: float = field( metadata={ @@ -60,7 +63,7 @@ class Direction: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Point: x: float = field( metadata={ @@ -85,7 +88,7 @@ class Point: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ViewSetupHints: spaces_visible: Optional[bool] = field( default=None, @@ -110,7 +113,7 @@ class ViewSetupHints: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ClippingPlane: location: Point = field( metadata={ @@ -128,12 +131,12 @@ class ClippingPlane: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ComponentColoringColor: class Meta: global_type = False - component: List[Component] = field( + component: list[Component] = field( default_factory=list, metadata={ "name": "Component", @@ -151,9 +154,9 @@ class ComponentColoringColor: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ComponentSelection: - component: List[Component] = field( + component: list[Component] = field( default_factory=list, metadata={ "name": "Component", @@ -163,12 +166,12 @@ class ComponentSelection: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ComponentVisibilityExceptions: class Meta: global_type = False - component: List[Component] = field( + component: list[Component] = field( default_factory=list, metadata={ "name": "Component", @@ -178,7 +181,7 @@ class ComponentVisibilityExceptions: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Line: start_point: Point = field( metadata={ @@ -196,7 +199,7 @@ class Line: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class OrthogonalCamera: """ Attributes @@ -236,7 +239,7 @@ class OrthogonalCamera: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class PerspectiveCamera: """ Attributes @@ -281,7 +284,7 @@ class PerspectiveCamera: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class VisualizationInfoBitmap: class Meta: global_type = False @@ -330,9 +333,9 @@ class VisualizationInfoBitmap: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ComponentColoring: - color: List[ComponentColoringColor] = field( + color: list[ComponentColoringColor] = field( default_factory=list, metadata={ "name": "Color", @@ -342,7 +345,7 @@ class ComponentColoring: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ComponentVisibility: exceptions: Optional[ComponentVisibilityExceptions] = field( default=None, @@ -360,12 +363,12 @@ class ComponentVisibility: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class VisualizationInfoClippingPlanes: class Meta: global_type = False - clipping_plane: List[ClippingPlane] = field( + clipping_plane: list[ClippingPlane] = field( default_factory=list, metadata={ "name": "ClippingPlane", @@ -374,12 +377,12 @@ class VisualizationInfoClippingPlanes: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class VisualizationInfoLines: class Meta: global_type = False - line: List[Line] = field( + line: list[Line] = field( default_factory=list, metadata={ "name": "Line", @@ -389,7 +392,7 @@ class VisualizationInfoLines: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Components: view_setup_hints: Optional[ViewSetupHints] = field( default=None, @@ -421,7 +424,7 @@ class Components: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class VisualizationInfo: """ VisualizationInfo documentation. @@ -462,7 +465,7 @@ class VisualizationInfo: "type": "Element", }, ) - bitmap: List[VisualizationInfoBitmap] = field( + bitmap: list[VisualizationInfoBitmap] = field( default_factory=list, metadata={ "name": "Bitmap", diff --git a/src/bcf/bcf/v2/topic.py b/src/bcf/bcf/v2/topic.py index 0a26cbcc93..7ea1c89772 100644 --- a/src/bcf/bcf/v2/topic.py +++ b/src/bcf/bcf/v2/topic.py @@ -1,5 +1,6 @@ """BCF XML V2 Topic handler.""" +from __future__ import annotations import datetime import tempfile import uuid @@ -152,7 +153,7 @@ class TopicHandler: topic_type: str = "", topic_status: str = "", xml_handler: Optional[AbstractXmlParserSerializer] = None, - ) -> "TopicHandler": + ) -> TopicHandler: """ Create a new BCF topic. diff --git a/src/bcf/bcf/v2/visinfo.py b/src/bcf/bcf/v2/visinfo.py index 359fbc0ab9..d0056ec407 100644 --- a/src/bcf/bcf/v2/visinfo.py +++ b/src/bcf/bcf/v2/visinfo.py @@ -1,6 +1,7 @@ import uuid import zipfile -from typing import Any, Iterable, Optional, Literal, Union +from typing import Any, Optional, Literal, Union +from collections.abc import Iterable import numpy as np from ifcopenshell import entity_instance diff --git a/src/bcf/bcf/v3/bcfapi.py b/src/bcf/bcf/v3/bcfapi.py index 7303ed8d7e..5c66cee067 100644 --- a/src/bcf/bcf/v3/bcfapi.py +++ b/src/bcf/bcf/v3/bcfapi.py @@ -21,11 +21,11 @@ import http.server import os import tempfile import time -import urllib +import urllib.parse import uuid import webbrowser from re import A -from typing import Any, Optional, Tuple +from typing import Any, Optional import requests @@ -40,7 +40,7 @@ class OAuthReceiver(http.server.BaseHTTPRequestHandler): self.send_response(200) self.send_header("Content-type", "text/plain") self.end_headers() - self.wfile.write("You have now authenticated :) You may now close this browser window.".encode("utf-8")) + self.wfile.write(b"You have now authenticated :) You may now close this browser window.") class FoundationClient: @@ -174,7 +174,7 @@ class BcfClient: except requests.exceptions.HTTPError as e: print(f"message: {response.reason}' '{response.status_code}' '{ e }") - def post(self, endpoint: str, data: Any = None, params: Any = None) -> Tuple[int, str]: + def post(self, endpoint: str, data: Any = None, params: Any = None) -> tuple[int, str]: headers = { "Authorization": f"Bearer {self.foundation_client.get_access_token()}", "Content-type": "application/json", @@ -192,7 +192,7 @@ class BcfClient: print(f"message: {response.reason}' '{response.status_code}, {errh}") return response.status_code, response.reason - def put(self, endpoint: str, data: Any = None, params: Any = None) -> Tuple[int, str]: + def put(self, endpoint: str, data: Any = None, params: Any = None) -> tuple[int, str]: headers = { "Authorization": f"Bearer {self.foundation_client.get_access_token()}", "Content-type": "application/json", @@ -210,7 +210,7 @@ class BcfClient: print(f"message: {response.reason}' '{response.status_code}, {errh}") return response.status_code, response.reason - def delete(self, endpoint: str, params: Any = None) -> Tuple[int, str]: + def delete(self, endpoint: str, params: Any = None) -> tuple[int, str]: headers = { "Authorization": f"Bearer {self.foundation_client.get_access_token()}", "Content-type": "application/json", @@ -237,7 +237,7 @@ class BcfClient: }, ) - def update_project(self, project_id: str = "", data: Any = None) -> Tuple[int, str]: + def update_project(self, project_id: str = "", data: Any = None) -> tuple[int, str]: url = f"{self.baseurl}/projects/{project_id}" headers = {"Authorization": f"Bearer {self.foundation_client.get_access_token()}"} resp = requests.put(url, headers=headers, data=data) @@ -276,16 +276,16 @@ class BcfClient: }, ) - def create_topic(self, project_id: str = "", data: Any = None) -> Tuple[int, str]: + def create_topic(self, project_id: str = "", data: Any = None) -> tuple[int, str]: return self.post(f"/projects/{project_id}/topics", data=data) - def update_topic(self, project_id: str = "", topic_id: str = "", data: Any = None) -> Tuple[int, str]: + def update_topic(self, project_id: str = "", topic_id: str = "", data: Any = None) -> tuple[int, str]: return self.put(f"/projects/{project_id}/topics/{topic_id}", data=data) - def delete_topic(self, project_id: str = "", topic_id: str = "") -> Tuple[int, str]: + def delete_topic(self, project_id: str = "", topic_id: str = "") -> tuple[int, str]: return self.delete(f"/projects/{project_id}/topics/{topic_id}") - def get_snippet(self, project_id: str = "", topic_id: str = "") -> Tuple[int, str]: + def get_snippet(self, project_id: str = "", topic_id: str = "") -> tuple[int, str]: headers = { "Authorization": f"Bearer {self.foundation_client.get_access_token()}", "Content-type": "application/octet-stream", @@ -332,7 +332,7 @@ class BcfClient: topic_id: str = "", data: Any = None, params: Any = None, - ) -> Tuple[int, str]: + ) -> tuple[int, str]: return self.put( f"/projects/{project_id}/topics/{topic_id}/files", data=data, @@ -347,7 +347,7 @@ class BcfClient: topic_id: str = "", data: Any = None, params: Any = None, - ) -> Tuple[int, str]: + ) -> tuple[int, str]: return self.post( f"/projects/{project_id}/topics/{topic_id}/comments", data=data, @@ -363,7 +363,7 @@ class BcfClient: }, ) - def delete_comment(self, project_id: str = "", topic_id: str = "", comment_id: str = "") -> Tuple[int, str]: + def delete_comment(self, project_id: str = "", topic_id: str = "", comment_id: str = "") -> tuple[int, str]: return self.delete(f"/projects/{project_id}/topics/{topic_id}/comments/{comment_id}") def update_comment( @@ -372,7 +372,7 @@ class BcfClient: topic_id: str = "", comment_id: str = "", data: Any = None, - ) -> Tuple[int, str]: + ) -> tuple[int, str]: return self.put( f"/projects/{project_id}/topics/{topic_id}/comments/{comment_id}", data=data, @@ -387,7 +387,7 @@ class BcfClient: }, ) - def create_viewpoints(self, project_id: str = "", topic_id: str = "", data: Any = None) -> Tuple[int, str]: + def create_viewpoints(self, project_id: str = "", topic_id: str = "", data: Any = None) -> tuple[int, str]: return self.post( f"/projects/{project_id}/topics/{topic_id}/viewpoints", data=data, @@ -408,7 +408,7 @@ class BcfClient: project_id: str = "", topic_id: str = "", viewpoint_id: str = "", - ) -> Tuple[int, str]: + ) -> tuple[int, str]: return self.delete( f"/projects/{project_id}/topics/{topic_id}/viewpoints/{viewpoint_id}", ) @@ -478,7 +478,7 @@ class BcfClient: project_id: str = "", topic_id: str = "", data: Any = None, - ) -> Tuple[int, str]: + ) -> tuple[int, str]: return self.put( f"/projects/{project_id}/topics/{topic_id}/related_topics", data=data, @@ -498,7 +498,7 @@ class BcfClient: project_id: str = "", topic_id: str = "", data: Any = None, - ) -> Tuple[int, str]: + ) -> tuple[int, str]: return self.post( f"/projects/{project_id}/topics/{topic_id}/document_references", data=data, @@ -510,7 +510,7 @@ class BcfClient: topic_id: str = "", document_reference_id: str = "", data: Any = None, - ) -> Tuple[int, str]: + ) -> tuple[int, str]: return self.put( f"/projects/{project_id}/topics/{topic_id}/document_references/{document_reference_id}", data=data, @@ -543,7 +543,7 @@ class BcfClient: return response.status_code - def get_document(self, project_id: str = "", topic_id: str = "", document_id: str = "") -> Tuple[int, str]: + def get_document(self, project_id: str = "", topic_id: str = "", document_id: str = "") -> tuple[int, str]: headers = { "Authorization": f"Bearer {self.foundation_client.get_access_token()}", "Content-type": "application/octet-stream", diff --git a/src/bcf/bcf/v3/bcfxml.py b/src/bcf/bcf/v3/bcfxml.py index 16d920737a..872efe5db9 100644 --- a/src/bcf/bcf/v3/bcfxml.py +++ b/src/bcf/bcf/v3/bcfxml.py @@ -1,5 +1,6 @@ """BCF XML V3 handlers.""" +from __future__ import annotations import uuid import warnings import zipfile @@ -30,7 +31,7 @@ class BcfXml: self._documents: Optional[DocumentsHandler] = None self._zip_file = self._load_zip_file() - def __enter__(self) -> "BcfXml": + def __enter__(self) -> BcfXml: return self def __exit__(self, *args: Any) -> None: @@ -116,7 +117,7 @@ class BcfXml: return self._documents @classmethod - def load(cls, filename: Path, xml_handler: Optional[AbstractXmlParserSerializer] = None) -> Optional["BcfXml"]: + def load(cls, filename: Path, xml_handler: Optional[AbstractXmlParserSerializer] = None) -> Optional[BcfXml]: """ Create a BcfXml object from a file. @@ -141,7 +142,7 @@ class BcfXml: project_name: Optional[str] = None, extensions: Optional[mdl.Extensions] = None, xml_handler: Optional[AbstractXmlParserSerializer] = None, - ) -> "BcfXml": + ) -> BcfXml: """ Create a new BcfXml object. @@ -239,7 +240,7 @@ class BcfXml: ) # region Deprecated methods - def new_project(self) -> "BcfXml": + def new_project(self) -> BcfXml: """Deprecated method.""" warnings.warn("new_project is deprecated, use create_new instead.", DeprecationWarning) return self.create_new() diff --git a/src/bcf/bcf/v3/model/__init__.py b/src/bcf/bcf/v3/model/__init__.py index ed74e66dcc..7ccfa02d0b 100644 --- a/src/bcf/bcf/v3/model/__init__.py +++ b/src/bcf/bcf/v3/model/__init__.py @@ -55,40 +55,12 @@ from bcf.v3.model.visinfo import ( ) __all__ = [ - "Document", - "DocumentInfo", - "DocumentInfoDocuments", - "Extensions", - "ExtensionsPriorities", - "ExtensionsSnippetTypes", - "ExtensionsStages", - "ExtensionsTopicLabels", - "ExtensionsTopicStatuses", - "ExtensionsTopicTypes", - "ExtensionsUsers", "BimSnippet", - "Comment", - "CommentViewpoint", - "DocumentReference", - "File", - "Header", - "HeaderFiles", - "Markup", - "Topic", - "TopicComments", - "TopicDocumentReferences", - "TopicLabels", - "TopicReferenceLinks", - "TopicRelatedTopics", - "TopicRelatedTopicsRelatedTopic", - "TopicViewpoints", - "ViewPoint", - "Project", - "ProjectInfo", - "Version", "Bitmap", "BitmapFormat", "ClippingPlane", + "Comment", + "CommentViewpoint", "Component", "ComponentColoring", "ComponentColoringColor", @@ -98,10 +70,38 @@ __all__ = [ "ComponentVisibilityExceptions", "Components", "Direction", + "Document", + "DocumentInfo", + "DocumentInfoDocuments", + "DocumentReference", + "Extensions", + "ExtensionsPriorities", + "ExtensionsSnippetTypes", + "ExtensionsStages", + "ExtensionsTopicLabels", + "ExtensionsTopicStatuses", + "ExtensionsTopicTypes", + "ExtensionsUsers", + "File", + "Header", + "HeaderFiles", "Line", + "Markup", "OrthogonalCamera", "PerspectiveCamera", "Point", + "Project", + "ProjectInfo", + "Topic", + "TopicComments", + "TopicDocumentReferences", + "TopicLabels", + "TopicReferenceLinks", + "TopicRelatedTopics", + "TopicRelatedTopicsRelatedTopic", + "TopicViewpoints", + "Version", + "ViewPoint", "ViewSetupHints", "VisualizationInfo", "VisualizationInfoBitmaps", diff --git a/src/bcf/bcf/v3/model/documents.py b/src/bcf/bcf/v3/model/documents.py index 1b18758d0e..2e2de1f5ea 100644 --- a/src/bcf/bcf/v3/model/documents.py +++ b/src/bcf/bcf/v3/model/documents.py @@ -1,8 +1,11 @@ +import sys from dataclasses import dataclass, field -from typing import List, Optional +from typing import Optional + +DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Document: filename: str = field( metadata={ @@ -34,12 +37,12 @@ class Document: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class DocumentInfoDocuments: class Meta: global_type = False - document: List[Document] = field( + document: list[Document] = field( default_factory=list, metadata={ "name": "Document", @@ -49,7 +52,7 @@ class DocumentInfoDocuments: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) 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 c9c47495ce..12d3d4dbfd 100644 --- a/src/bcf/bcf/v3/model/extensions.py +++ b/src/bcf/bcf/v3/model/extensions.py @@ -1,13 +1,16 @@ +import sys from dataclasses import dataclass, field -from typing import List, Optional +from typing import Optional + +DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ExtensionsPriorities: class Meta: global_type = False - priority: List[str] = field( + priority: list[str] = field( default_factory=list, metadata={ "name": "Priority", @@ -19,12 +22,12 @@ class ExtensionsPriorities: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ExtensionsSnippetTypes: class Meta: global_type = False - snippet_type: List[str] = field( + snippet_type: list[str] = field( default_factory=list, metadata={ "name": "SnippetType", @@ -36,12 +39,12 @@ class ExtensionsSnippetTypes: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ExtensionsStages: class Meta: global_type = False - stage: List[str] = field( + stage: list[str] = field( default_factory=list, metadata={ "name": "Stage", @@ -53,12 +56,12 @@ class ExtensionsStages: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ExtensionsTopicLabels: class Meta: global_type = False - topic_label: List[str] = field( + topic_label: list[str] = field( default_factory=list, metadata={ "name": "TopicLabel", @@ -70,12 +73,12 @@ class ExtensionsTopicLabels: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ExtensionsTopicStatuses: class Meta: global_type = False - topic_status: List[str] = field( + topic_status: list[str] = field( default_factory=list, metadata={ "name": "TopicStatus", @@ -87,12 +90,12 @@ class ExtensionsTopicStatuses: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ExtensionsTopicTypes: class Meta: global_type = False - topic_type: List[str] = field( + topic_type: list[str] = field( default_factory=list, metadata={ "name": "TopicType", @@ -104,12 +107,12 @@ class ExtensionsTopicTypes: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ExtensionsUsers: class Meta: global_type = False - user: List[str] = field( + user: list[str] = field( default_factory=list, metadata={ "name": "User", @@ -121,7 +124,7 @@ class ExtensionsUsers: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) 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 4121b04abe..96b656b09d 100644 --- a/src/bcf/bcf/v3/model/markup.py +++ b/src/bcf/bcf/v3/model/markup.py @@ -1,10 +1,13 @@ +import sys from dataclasses import dataclass, field -from typing import List, Optional +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(slots=True, kw_only=True) + +@dataclass(**DATACLASS_KWARGS) class BimSnippet: reference: str = field( metadata={ @@ -44,7 +47,7 @@ class BimSnippet: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class CommentViewpoint: class Meta: global_type = False @@ -59,7 +62,7 @@ class CommentViewpoint: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class DocumentReference: document_guid: Optional[str] = field( default=None, @@ -100,7 +103,7 @@ class DocumentReference: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class File: filename: Optional[str] = field( default=None, @@ -157,12 +160,12 @@ class File: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class TopicLabels: class Meta: global_type = False - label: List[str] = field( + label: list[str] = field( default_factory=list, metadata={ "name": "Label", @@ -174,12 +177,12 @@ class TopicLabels: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class TopicReferenceLinks: class Meta: global_type = False - reference_link: List[str] = field( + reference_link: list[str] = field( default_factory=list, metadata={ "name": "ReferenceLink", @@ -191,7 +194,7 @@ class TopicReferenceLinks: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class TopicRelatedTopicsRelatedTopic: class Meta: global_type = False @@ -206,7 +209,7 @@ class TopicRelatedTopicsRelatedTopic: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ViewPoint: viewpoint: Optional[str] = field( default=None, @@ -246,7 +249,7 @@ class ViewPoint: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Comment: date: XmlDateTime = field( metadata={ @@ -312,12 +315,12 @@ class Comment: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class HeaderFiles: class Meta: global_type = False - file: List[File] = field( + file: list[File] = field( default_factory=list, metadata={ "name": "File", @@ -327,12 +330,12 @@ class HeaderFiles: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class TopicDocumentReferences: class Meta: global_type = False - document_reference: List[DocumentReference] = field( + document_reference: list[DocumentReference] = field( default_factory=list, metadata={ "name": "DocumentReference", @@ -342,12 +345,12 @@ class TopicDocumentReferences: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class TopicRelatedTopics: class Meta: global_type = False - related_topic: List[TopicRelatedTopicsRelatedTopic] = field( + related_topic: list[TopicRelatedTopicsRelatedTopic] = field( default_factory=list, metadata={ "name": "RelatedTopic", @@ -357,12 +360,12 @@ class TopicRelatedTopics: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class TopicViewpoints: class Meta: global_type = False - view_point: List[ViewPoint] = field( + view_point: list[ViewPoint] = field( default_factory=list, metadata={ "name": "ViewPoint", @@ -372,7 +375,7 @@ class TopicViewpoints: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Header: files: Optional[HeaderFiles] = field( default=None, @@ -384,12 +387,12 @@ class Header: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class TopicComments: class Meta: global_type = False - comment: List[Comment] = field( + comment: list[Comment] = field( default_factory=list, metadata={ "name": "Comment", @@ -399,7 +402,7 @@ class TopicComments: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Topic: reference_links: Optional[TopicReferenceLinks] = field( default=None, @@ -596,7 +599,7 @@ class Topic: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) 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 76a6922925..ff07fa2c08 100644 --- a/src/bcf/bcf/v3/model/project.py +++ b/src/bcf/bcf/v3/model/project.py @@ -1,8 +1,11 @@ +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(slots=True, kw_only=True) + +@dataclass(**DATACLASS_KWARGS) class Project: name: Optional[str] = field( default=None, @@ -25,7 +28,7 @@ class Project: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) 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 f3a44d2ab3..dd8cc713e3 100644 --- a/src/bcf/bcf/v3/model/version.py +++ b/src/bcf/bcf/v3/model/version.py @@ -1,7 +1,10 @@ +import sys from dataclasses import dataclass, field +DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} -@dataclass(slots=True, kw_only=True) + +@dataclass(**DATACLASS_KWARGS) 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 1a1dcb72c5..43a00f33d3 100644 --- a/src/bcf/bcf/v3/model/visinfo.py +++ b/src/bcf/bcf/v3/model/visinfo.py @@ -1,6 +1,10 @@ +import sys from dataclasses import dataclass, field from enum import Enum -from typing import List, Optional +from typing import Optional + + +DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} class BitmapFormat(Enum): @@ -8,7 +12,7 @@ class BitmapFormat(Enum): JPG = "jpg" -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Component: originating_system: Optional[str] = field( default=None, @@ -39,7 +43,7 @@ class Component: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Direction: x: float = field( metadata={ @@ -64,7 +68,7 @@ class Direction: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Point: x: float = field( metadata={ @@ -89,7 +93,7 @@ class Point: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ViewSetupHints: spaces_visible: bool = field( default=False, @@ -114,7 +118,7 @@ class ViewSetupHints: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Bitmap: format: BitmapFormat = field( metadata={ @@ -162,7 +166,7 @@ class Bitmap: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ClippingPlane: location: Point = field( metadata={ @@ -180,12 +184,12 @@ class ClippingPlane: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ComponentColoringColorComponents: class Meta: global_type = False - component: List[Component] = field( + component: list[Component] = field( default_factory=list, metadata={ "name": "Component", @@ -195,9 +199,9 @@ class ComponentColoringColorComponents: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ComponentSelection: - component: List[Component] = field( + component: list[Component] = field( default_factory=list, metadata={ "name": "Component", @@ -206,12 +210,12 @@ class ComponentSelection: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ComponentVisibilityExceptions: class Meta: global_type = False - component: List[Component] = field( + component: list[Component] = field( default_factory=list, metadata={ "name": "Component", @@ -220,7 +224,7 @@ class ComponentVisibilityExceptions: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Line: start_point: Point = field( metadata={ @@ -238,7 +242,7 @@ class Line: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class OrthogonalCamera: """ Attributes @@ -288,7 +292,7 @@ class OrthogonalCamera: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class PerspectiveCamera: """ Attributes @@ -344,7 +348,7 @@ class PerspectiveCamera: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ComponentColoringColor: class Meta: global_type = False @@ -366,7 +370,7 @@ class ComponentColoringColor: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ComponentVisibility: view_setup_hints: Optional[ViewSetupHints] = field( default=None, @@ -391,12 +395,12 @@ class ComponentVisibility: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class VisualizationInfoBitmaps: class Meta: global_type = False - bitmap: List[Bitmap] = field( + bitmap: list[Bitmap] = field( default_factory=list, metadata={ "name": "Bitmap", @@ -405,12 +409,12 @@ class VisualizationInfoBitmaps: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class VisualizationInfoClippingPlanes: class Meta: global_type = False - clipping_plane: List[ClippingPlane] = field( + clipping_plane: list[ClippingPlane] = field( default_factory=list, metadata={ "name": "ClippingPlane", @@ -419,12 +423,12 @@ class VisualizationInfoClippingPlanes: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class VisualizationInfoLines: class Meta: global_type = False - line: List[Line] = field( + line: list[Line] = field( default_factory=list, metadata={ "name": "Line", @@ -433,9 +437,9 @@ class VisualizationInfoLines: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class ComponentColoring: - color: List[ComponentColoringColor] = field( + color: list[ComponentColoringColor] = field( default_factory=list, metadata={ "name": "Color", @@ -444,7 +448,7 @@ class ComponentColoring: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class Components: selection: Optional[ComponentSelection] = field( default=None, @@ -469,7 +473,7 @@ class Components: ) -@dataclass(slots=True, kw_only=True) +@dataclass(**DATACLASS_KWARGS) class VisualizationInfo: """ VisualizationInfo documentation. diff --git a/src/bcf/bcf/v3/topic.py b/src/bcf/bcf/v3/topic.py index b0cfa4268d..38fea3de7e 100644 --- a/src/bcf/bcf/v3/topic.py +++ b/src/bcf/bcf/v3/topic.py @@ -1,5 +1,6 @@ """BCF XML V3 Topic handler.""" +from __future__ import annotations import datetime import uuid import zipfile @@ -91,12 +92,12 @@ class TopicHandler: self._bim_snippet = value @property - def viewpoints(self) -> dict[str, "VisualizationInfoHandler"]: + def viewpoints(self) -> dict[str, VisualizationInfoHandler]: if self._viewpoints is None: self._viewpoints = self._load_viewpoints() return self._viewpoints - def _load_viewpoints(self) -> dict[str, "VisualizationInfoHandler"]: + def _load_viewpoints(self) -> dict[str, VisualizationInfoHandler]: if self._topic_dir and self.topic.viewpoints and (viewpoints := self.topic.viewpoints.view_point): return VisualizationInfoHandler.from_topic_viewpoints(self._topic_dir, viewpoints) return {} @@ -139,7 +140,7 @@ class TopicHandler: topic_type: str = "", topic_status: str = "", xml_handler: Optional[AbstractXmlParserSerializer] = None, - ) -> "TopicHandler": + ) -> TopicHandler: """ Create a new BCF topic. diff --git a/src/bcf/bcf/v3/visinfo.py b/src/bcf/bcf/v3/visinfo.py index 6fb2be6a39..1cb442aa83 100644 --- a/src/bcf/bcf/v3/visinfo.py +++ b/src/bcf/bcf/v3/visinfo.py @@ -1,6 +1,7 @@ import uuid import zipfile -from typing import Any, Iterable, Optional, Literal, Union +from typing import Any, Optional, Literal, Union +from collections.abc import Iterable import numpy as np from ifcopenshell import entity_instance diff --git a/src/bcf/bcf/xml_parser.py b/src/bcf/bcf/xml_parser.py index a5dbd3b71c..e53debb853 100644 --- a/src/bcf/bcf/xml_parser.py +++ b/src/bcf/bcf/xml_parser.py @@ -1,6 +1,6 @@ """XML Parser and Serializer factories.""" -from typing import Optional, Protocol, Type, TypeVar +from typing import Optional, Protocol, TypeVar from xsdata.formats.dataclass.context import XmlContext from xsdata.formats.dataclass.parsers import XmlParser @@ -29,7 +29,7 @@ T = TypeVar("T") class AbstractXmlParserSerializer(Protocol): """XML Parser and serializer wrapper.""" - def parse(self, xml: bytes, clazz: Type[T]) -> T: + def parse(self, xml: bytes, clazz: type[T]) -> T: """ Parse an XML file to an object. @@ -61,7 +61,7 @@ class XmlParserSerializer: self.parser = build_xml_parser(self.context) self.serializer = build_serializer(self.context) - def parse(self, xml: bytes, clazz: Type[T]) -> T: + def parse(self, xml: bytes, clazz: type[T]) -> T: """ Parse an XML file to an object. diff --git a/src/bcf/pyproject.toml b/src/bcf/pyproject.toml index b5ec969a93..7047595ce1 100644 --- a/src/bcf/pyproject.toml +++ b/src/bcf/pyproject.toml @@ -16,6 +16,7 @@ dependencies = [ "xsdata>=24.4", "numpy", "ifcopenshell", + "requests", ] version = "0.0.0" classifiers = [ diff --git a/src/bonsai/Makefile b/src/bonsai/Makefile index 8933f14290..5bc39cbd84 100644 --- a/src/bonsai/Makefile +++ b/src/bonsai/Makefile @@ -16,6 +16,7 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +SHELL := sh PYTHON:=python3.11 PIP:=pip3.11 PATCH:=patch @@ -86,7 +87,7 @@ BLENDER_PLATFORM:=windows-x64 endif # Current build commit hash. -OLD:=c49ca69 +OLD:=358395c .PHONY: bump bump: ifndef NEW @@ -137,7 +138,7 @@ endif # odfpy doesn't come with its own wheel, so whee'l (get it?) create it ourselves! cd build && . env/$(VENV_ACTIVATE) && $(PIP) wheel odfpy --wheel-dir=./wheels # Required by IFCCityJSON - cd build && . env/$(VENV_ACTIVATE) && $(PIP) download cjio --dest=./wheels + cd build && . env/$(VENV_ACTIVATE) && $(PIP) download "cjio >=0.8, <0.10" --dest=./wheels # Required in general for sorting all sorts of stuff in a nice way cd build && . env/$(VENV_ACTIVATE) && $(PIP) download natsort --dest=./wheels # Provides express rule validation for ifcopenshell.validate @@ -192,13 +193,15 @@ else cd build && . env/$(VENV_ACTIVATE) && $(PIP) download pyradiance $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --dest=./wheels endif + # jQuery is required for web UI functionality + cd build/bonsai/bim/data/webui/static/js/ && wget https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js + # Provides jsgantt-improved supports for web-based construction sequencing gantt charts cd build/bonsai/bim/data/gantt/ && wget https://raw.githubusercontent.com/jsGanttImproved/jsgantt-improved/master/dist/jsgantt.js cd build/bonsai/bim/data/gantt/ && wget https://raw.githubusercontent.com/jsGanttImproved/jsgantt-improved/master/dist/jsgantt.css # Provides IFCJSON functionality - # TODO: replace with main repo if https://github.com/IFCJSON-Team/IFC2JSON_python/pull/3 is merged. - cd build && wget -O ifc2json.zip https://github.com/Moult/IFC2JSON_python/archive/refs/heads/feature-ios-v0.8.0.zip + cd build && wget -O ifc2json.zip https://github.com/IFCJSON-Team/IFC2JSON_python/archive/refs/heads/master.zip cd build && unzip ifc2json.zip && rm ifc2json.zip # IFCJSON doesn't have pyproject.toml, so we use python command. cd build && . env/$(VENV_ACTIVATE) && cd IFC2JSON_python-*/file_converters && \ diff --git a/src/bonsai/bonsai/__init__.py b/src/bonsai/bonsai/__init__.py index 6ea48885b3..ea0c4ca753 100644 --- a/src/bonsai/bonsai/__init__.py +++ b/src/bonsai/bonsai/__init__.py @@ -28,6 +28,10 @@ IN_BLENDER = sys.modules.get("bpy", None) if IN_BLENDER: import bpy +# This file is executed twice - first as a bonsai-extension +# and then as a bonsai-package. +IN_PACKAGE = __package__ == "bonsai" + import re import platform import traceback @@ -36,7 +40,8 @@ import uuid import shutil from collections import deque from pathlib import Path -from typing import Union, Any, Generator +from typing import Union, Any +from collections.abc import Generator last_commit_hash = "8888888" @@ -218,17 +223,21 @@ if IN_BLENDER: info["binary_python_version"] = version return info - try: - import git + def update_commit_data() -> None: + try: + import git - # We can't just use __file__ as bonsai/__init__.py is typically not symlinked - # as Blender have errors symlinking main addon package file. - path = Path(__file__).resolve().parent - repo = git.Repo(str(path), search_parent_directories=True) - last_commit_hash = repo.head.object.hexsha - last_commit_date = repo.head.object.committed_datetime.isoformat() - except: - pass + global last_commit_hash + global last_commit_date + path = Path(__file__).resolve().parent + repo = git.Repo(str(path), search_parent_directories=True) + last_commit_hash = repo.head.object.hexsha + last_commit_date = repo.head.object.committed_datetime.isoformat() + except: + pass + + if IN_PACKAGE: + update_commit_data() try: import ifcopenshell.api @@ -244,6 +253,12 @@ if IN_BLENDER: ifcopenshell.api.add_pre_listener("*", "action_logger", log_api) + def purge_cache(): + """Purge cache left from previous session (e.g. after reload or update).""" + import bonsai.tool as tool + + tool.Blender.get_bonsai_version.cache_clear() + def register(): if platform.system() == "Windows": clean_up_dlls_safe_links() @@ -261,6 +276,7 @@ if IN_BLENDER: bonsai.REINSTALLED_BBIM_VERSION = current_version bonsai.bim.register() + purge_cache() def unregister(): if platform.system() == "Windows": diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 930e067c24..79fc5fdd54 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -20,8 +20,10 @@ import os 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 Callable, Union +from typing import Union +from collections.abc import Callable try: from bonsai.translations import translations_dict @@ -95,17 +97,20 @@ for name in modules.keys(): classes = [ - operator.AddIfcFile, operator.BIM_OT_add_section_plane, operator.BIM_OT_delete_object, operator.BIM_OT_remove_section_plane, operator.BIM_OT_select_entity, + operator.BIM_OT_select_entity_by_guid, operator.BIM_OT_select_object, operator.BIM_OT_show_description, operator.BIM_OT_multiple_file_selector, + operator.BIM_OT_attribute_add_subitem, + operator.BIM_OT_attribute_remove_subitem, operator.ClippingPlaneCutWithCappings, operator.CloseBlendWarning, operator.CloseError, + operator.CreateMacBonsaiApp, operator.CopyTextToClipboard, operator.EditBlenderCollection, operator.FileAssociate, @@ -114,24 +119,25 @@ classes = [ operator.OpenUpstream, operator.OpenUri, operator.ReloadIfcFile, - operator.RemoveIfcFile, operator.RevertClippingPlaneCut, operator.SelectDir, operator.SelectIfcFile, operator.SelectURIAttribute, operator.SetTab, operator.SwitchTab, + operator.ShowSystemInfo, prop.StrProperty, operator.BIM_OT_enum_property_search, # /!\ Register AFTER prop.StrProperty + operator.BIM_OT_attribute_search_values, prop.ObjProperty, prop.MultipleFileSelect, prop.Attribute, + prop.ISODuration, prop.BIMAreaProperties, prop.BIMTabProperties, prop.BIMProperties, prop.IfcParameter, prop.PsetQto, - prop.GlobalId, prop.BIMObjectProperties, prop.BIMCollectionProperties, prop.BIMMeshProperties, @@ -141,7 +147,7 @@ classes = [ prop.BIMSnapGroups, ui.BIM_UL_clipping_plane, ui.BIM_UL_generic, - ui.BIM_UL_topics, + ui.DocPreferences, ui.BIM_ADDON_preferences, # Tabs panel ui.BIM_PT_tabs, @@ -149,10 +155,10 @@ classes = [ ui.BIM_PT_tab_new_project_wizard, ui.BIM_PT_tab_project_info, ui.BIM_PT_tab_spatial, + ui.BIM_PT_tab_grouping_and_filtering, ui.BIM_PT_tab_project_setup, ui.BIM_PT_tab_geometry, ui.BIM_PT_tab_stakeholders, - ui.BIM_PT_tab_grouping_and_filtering, # Object information ui.BIM_PT_tab_object_metadata, ui.BIM_PT_tab_misc, @@ -221,7 +227,12 @@ def on_register(scene): def register(): for cls in classes: + # 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) + 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) diff --git a/src/bonsai/bonsai/bim/data/assets/shading_styles.json b/src/bonsai/bonsai/bim/data/assets/shading_styles.json index dd7ded4423..602b8a652e 100644 --- a/src/bonsai/bonsai/bim/data/assets/shading_styles.json +++ b/src/bonsai/bonsai/bim/data/assets/shading_styles.json @@ -47,8 +47,6 @@ "scene.render.simplify_gpencil_shader_fx": true, "scene.render.simplify_gpencil_tint": true, "scene.render.simplify_gpencil_view_fill": true, - "scene.render.simplify_shadows": 1.0, - "scene.render.simplify_shadows_render": 1.0, "scene.render.simplify_subdivision": 6, "scene.render.simplify_subdivision_render": 6, "scene.render.simplify_volumes": 1.0, @@ -147,7 +145,7 @@ "scene.display.shading.use_scene_world_render": false, "scene.display.shading.use_studiolight_view_rotation": true, "scene.display.shading.use_world_space_lighting": false, - "scene.display.shading.wireframe_color_type": "MATERIAL", + "scene.display.shading.wireframe_color_type": "THEME", "scene.display.shading.xray_alpha": 0.5, "scene.display.shading.xray_alpha_wireframe": 0.0, "scene.display.light_direction": [ @@ -162,7 +160,6 @@ "scene.display.shadow_focus": 0.0, "scene.display.shadow_shift": 0.10000000149011612, "scene.display.viewport_aa": "FXAA", - "space.overlay.backwire_opacity": 0.5, "space.overlay.bone_wire_alpha": 1.0, "space.overlay.display_handle": "SELECTED", "space.overlay.fade_inactive_alpha": 0.4000000059604645, @@ -189,7 +186,6 @@ "space.overlay.show_edge_crease": true, "space.overlay.show_edge_seams": true, "space.overlay.show_edge_sharp": true, - "space.overlay.show_edges": false, "space.overlay.show_extra_edge_angle": false, "space.overlay.show_extra_edge_length": false, "space.overlay.show_extra_face_angle": false, @@ -208,7 +204,6 @@ "space.overlay.show_motion_paths": true, "space.overlay.show_object_origins": false, "space.overlay.show_object_origins_all": false, - "space.overlay.show_occlude_wire": false, "space.overlay.show_onion_skins": false, "space.overlay.show_ortho_grid": true, "space.overlay.show_outline_selected": true, @@ -298,8 +293,6 @@ "scene.render.simplify_gpencil_shader_fx": true, "scene.render.simplify_gpencil_tint": true, "scene.render.simplify_gpencil_view_fill": true, - "scene.render.simplify_shadows": 1.0, - "scene.render.simplify_shadows_render": 1.0, "scene.render.simplify_subdivision": 6, "scene.render.simplify_subdivision_render": 6, "scene.render.simplify_volumes": 1.0, @@ -398,7 +391,7 @@ "scene.display.shading.use_scene_world_render": false, "scene.display.shading.use_studiolight_view_rotation": true, "scene.display.shading.use_world_space_lighting": false, - "scene.display.shading.wireframe_color_type": "MATERIAL", + "scene.display.shading.wireframe_color_type": "THEME", "scene.display.shading.xray_alpha": 0.5, "scene.display.shading.xray_alpha_wireframe": 0.0, "scene.display.light_direction": [ @@ -413,7 +406,6 @@ "scene.display.shadow_focus": 0.0, "scene.display.shadow_shift": 0.10000000149011612, "scene.display.viewport_aa": "FXAA", - "space.overlay.backwire_opacity": 0.5, "space.overlay.bone_wire_alpha": 1.0, "space.overlay.display_handle": "SELECTED", "space.overlay.fade_inactive_alpha": 0.4000000059604645, @@ -440,7 +432,6 @@ "space.overlay.show_edge_crease": true, "space.overlay.show_edge_seams": true, "space.overlay.show_edge_sharp": true, - "space.overlay.show_edges": false, "space.overlay.show_extra_edge_angle": false, "space.overlay.show_extra_edge_length": false, "space.overlay.show_extra_face_angle": false, @@ -459,7 +450,6 @@ "space.overlay.show_motion_paths": true, "space.overlay.show_object_origins": false, "space.overlay.show_object_origins_all": false, - "space.overlay.show_occlude_wire": false, "space.overlay.show_onion_skins": false, "space.overlay.show_ortho_grid": true, "space.overlay.show_outline_selected": true, @@ -509,6 +499,10 @@ 0.05087608844041824, 0.05087608844041824 ], + "scene.eevee.use_shadows": true, + "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", @@ -520,7 +514,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", + "scene.render.engine": "BLENDER_EEVEE_NEXT", "scene.render.film_transparent": false, "scene.render.filter_size": 1.5, "scene.render.fps": 24, @@ -549,8 +543,6 @@ "scene.render.simplify_gpencil_shader_fx": true, "scene.render.simplify_gpencil_tint": true, "scene.render.simplify_gpencil_view_fill": true, - "scene.render.simplify_shadows": 1.0, - "scene.render.simplify_shadows_render": 1.0, "scene.render.simplify_subdivision": 6, "scene.render.simplify_subdivision_render": 6, "scene.render.simplify_volumes": 1.0, @@ -649,7 +641,7 @@ "scene.display.shading.use_scene_world_render": false, "scene.display.shading.use_studiolight_view_rotation": true, "scene.display.shading.use_world_space_lighting": false, - "scene.display.shading.wireframe_color_type": "MATERIAL", + "scene.display.shading.wireframe_color_type": "THEME", "scene.display.shading.xray_alpha": 0.5, "scene.display.shading.xray_alpha_wireframe": 0.0, "scene.display.light_direction": [ @@ -664,7 +656,6 @@ "scene.display.shadow_focus": 0.0, "scene.display.shadow_shift": 0.10000000149011612, "scene.display.viewport_aa": "FXAA", - "space.overlay.backwire_opacity": 0.5, "space.overlay.bone_wire_alpha": 1.0, "space.overlay.display_handle": "SELECTED", "space.overlay.fade_inactive_alpha": 0.4000000059604645, @@ -691,7 +682,6 @@ "space.overlay.show_edge_crease": true, "space.overlay.show_edge_seams": true, "space.overlay.show_edge_sharp": true, - "space.overlay.show_edges": false, "space.overlay.show_extra_edge_angle": false, "space.overlay.show_extra_edge_length": false, "space.overlay.show_extra_face_angle": false, @@ -710,7 +700,6 @@ "space.overlay.show_motion_paths": true, "space.overlay.show_object_origins": true, "space.overlay.show_object_origins_all": false, - "space.overlay.show_occlude_wire": false, "space.overlay.show_onion_skins": false, "space.overlay.show_ortho_grid": true, "space.overlay.show_outline_selected": true, diff --git a/src/bonsai/bonsai/bim/data/icons/dm_extend_height.png b/src/bonsai/bonsai/bim/data/icons/dm_extend_height.png new file mode 100644 index 0000000000..93ffd71099 Binary files /dev/null and b/src/bonsai/bonsai/bim/data/icons/dm_extend_height.png differ diff --git a/src/bonsai/bonsai/bim/data/icons/lm_extend_height.png b/src/bonsai/bonsai/bim/data/icons/lm_extend_height.png new file mode 100644 index 0000000000..1f75a6cd1c Binary files /dev/null and b/src/bonsai/bonsai/bim/data/icons/lm_extend_height.png differ diff --git a/src/bonsai/bonsai/bim/data/libraries/IFC2X3 Demo Library.ifc b/src/bonsai/bonsai/bim/data/libraries/IFC2X3 Demo Library.ifc new file mode 100644 index 0000000000..0b029c16eb --- /dev/null +++ b/src/bonsai/bonsai/bim/data/libraries/IFC2X3 Demo Library.ifc @@ -0,0 +1,3204 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition[DesignTransferView]'),'2;1'); +FILE_NAME('/dev/null','2025-03-27T17:30:27+05:00',(''),(''),'IfcOpenShell 0.0.0','IfcOpenShell 0.0.0','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=IFCTELECOMADDRESS(.USERDEFINED.,$,'WEBPAGE',$,$,$,$,'https://ifcopenshell.org'); +#6=IFCORGANIZATION('IfcOpenShell','IfcOpenShell','IfcOpenShell is an open source software library that helps users and software developers to work with IFC data.',(#4),(#5)); +#7=IFCAPPLICATION(#6,'0.0.0','Bonsai','Bonsai'); +#8=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#9=IFCPROJECT('3NJUxHyTzEv96oezyDYEqf',#8,'Bonsai Demo',$,$,$,$,(#18,#22),#13); +#10=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); +#11=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#12=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#13=IFCUNITASSIGNMENT((#11,#12,#10)); +#14=IFCCARTESIANPOINT((0.,0.,0.)); +#15=IFCDIRECTION((0.,0.,1.)); +#16=IFCDIRECTION((1.,0.,0.)); +#17=IFCAXIS2PLACEMENT3D(#14,#15,#16); +#18=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#17,$); +#19=IFCCARTESIANPOINT((0.,0.)); +#20=IFCDIRECTION((1.,0.)); +#21=IFCAXIS2PLACEMENT2D(#19,#20); +#22=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Plan',2,1.E-05,#21,$); +#23=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#18,$,.MODEL_VIEW.,$); +#24=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Plan',*,*,*,*,#22,$,.PLAN_VIEW.,$); +#25=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#22,$,.MODEL_VIEW.,$); +#26=IFCMATERIAL('Unknown'); +#27=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#28=IFCWALLTYPE('2F1k78lI53fwS0rg3rqrRb',#27,'WAL50',$,$,$,$,$,$,.NOTDEFINED.); +#29=IFCMATERIALLAYERSET((#32),$); +#30=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#31=IFCRELASSOCIATESMATERIAL('0khP_Smdj12f2JrOTRbRKj',#30,$,$,(#28),#29); +#32=IFCMATERIALLAYER(#26,0.05,$); +#33=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#34=IFCWALLTYPE('3R5onkTtX1IxdCMPoThRaw',#33,'WAL100',$,$,$,$,$,$,.NOTDEFINED.); +#35=IFCMATERIALLAYERSET((#38),$); +#36=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#37=IFCRELASSOCIATESMATERIAL('0$mXRPCT16nP6Q70XFNvZv',#36,$,$,(#34),#35); +#38=IFCMATERIALLAYER(#26,0.1,$); +#39=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#40=IFCWALLTYPE('1juanculbDJPqvqT2FCm8m',#39,'WAL200',$,$,$,$,$,$,.NOTDEFINED.); +#41=IFCMATERIALLAYERSET((#44),$); +#42=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#43=IFCRELASSOCIATESMATERIAL('0FsB2A$frFn9AZW2IG38ny',#42,$,$,(#40),#41); +#44=IFCMATERIALLAYER(#26,0.2,$); +#45=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#46=IFCWALLTYPE('05UYduR9r1vRxZZgP64Rdw',#45,'WAL300',$,$,$,$,$,$,.NOTDEFINED.); +#47=IFCMATERIALLAYERSET((#50),$); +#48=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#49=IFCRELASSOCIATESMATERIAL('2FYhYrvmv4SBoZHVWDTTte',#48,$,$,(#46),#47); +#50=IFCMATERIALLAYER(#26,0.3,$); +#51=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#52=IFCCOVERINGTYPE('0iLxgfHB9F2hRH2vMcw7Yv',#51,'COV10',$,$,$,$,$,$,.NOTDEFINED.); +#53=IFCMATERIALLAYERSET((#56),$); +#54=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#55=IFCRELASSOCIATESMATERIAL('0yvFX0zgb9uvJ3ARnf4mfe',#54,$,$,(#52),#53); +#56=IFCMATERIALLAYER(#26,0.01,$); +#57=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#58=IFCCOVERINGTYPE('15Riw2WTrAUPwvfLyKXJ2g',#57,'COV20',$,$,(#64),$,$,$,.NOTDEFINED.); +#59=IFCMATERIALLAYERSET((#62),$); +#60=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#61=IFCRELASSOCIATESMATERIAL('1iAOG6NK9FBxitFtzN9qP5',#60,$,$,(#58),#59); +#62=IFCMATERIALLAYER(#26,0.02,$); +#63=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#64=IFCPROPERTYSET('18ICCZ0fjDG9UXMyzrsFBA',#63,'EPset_Parametric',$,(#65)); +#65=IFCPROPERTYSINGLEVALUE('LayerSetDirection',$,IFCLABEL('AXIS2'),$); +#66=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#67=IFCCOVERINGTYPE('0gEOtYULD0F9KD9zPoA6cJ',#66,'COV30',$,$,(#73),$,$,$,.NOTDEFINED.); +#68=IFCMATERIALLAYERSET((#71),$); +#69=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#70=IFCRELASSOCIATESMATERIAL('0xd6dsjf13JA98q9fnAMpQ',#69,$,$,(#67),#68); +#71=IFCMATERIALLAYER(#26,0.03,$); +#72=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#73=IFCPROPERTYSET('3qCbs1tuDCvuOXam5RrA$a',#72,'EPset_Parametric',$,(#74)); +#74=IFCPROPERTYSINGLEVALUE('LayerSetDirection',$,IFCLABEL('AXIS3'),$); +#75=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#76=IFCSLABTYPE('1Akbal7tP5DAPW0ti$Qp30',#75,'FLR200',$,$,$,$,$,$,.NOTDEFINED.); +#77=IFCMATERIALLAYERSET((#80),$); +#78=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#79=IFCRELASSOCIATESMATERIAL('0jzkXlkBL4HhmQ_FTWW6Cj',#78,$,$,(#76),#77); +#80=IFCMATERIALLAYER(#26,0.2,$); +#81=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#82=IFCSLABTYPE('0$gpYNi3T08BrxaR67CxgI',#81,'FLR300',$,$,$,$,$,$,.NOTDEFINED.); +#83=IFCMATERIALLAYERSET((#86),$); +#84=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#85=IFCRELASSOCIATESMATERIAL('3a6kjEM29DleYTlSkA8_DK',#84,$,$,(#82),#83); +#86=IFCMATERIALLAYER(#26,0.3,$); +#87=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1743078627,#3,#7,1743078627); +#88=IFCWINDOWSTYLE('0bK3c4PWL3eOMNwkPN$rlg',#87,'WT01',$,$,$,(#198,#229),$,.NOTDEFINED.,.NOTDEFINED.,.F.,.F.); +#89=IFCCARTESIANPOINT((0.899999976158142,0.,1.20000004768372)); +#90=IFCCARTESIANPOINT((0.899999976158142,0.,0.)); +#91=IFCCARTESIANPOINT((0.,0.,1.20000004768372)); +#92=IFCCARTESIANPOINT((0.,0.,0.)); +#93=IFCCARTESIANPOINT((0.0999999940395355,0.,0.0999999940395355)); +#94=IFCCARTESIANPOINT((0.0999999940395355,0.,1.10000002384186)); +#95=IFCCARTESIANPOINT((0.800000011920929,0.,1.10000002384186)); +#96=IFCCARTESIANPOINT((0.800000011920929,0.,0.0999999940395355)); +#97=IFCCARTESIANPOINT((0.0999999940395355,0.0199999995529652,0.0999999940395355)); +#98=IFCCARTESIANPOINT((0.0999999940395355,0.0199999995529652,1.10000002384186)); +#99=IFCCARTESIANPOINT((0.800000011920929,0.0199999995529652,1.10000002384186)); +#100=IFCCARTESIANPOINT((0.800000011920929,0.0199999995529652,0.0999999940395355)); +#101=IFCCARTESIANPOINT((0.0999999940395355,0.0500000007450581,0.0999999940395355)); +#102=IFCCARTESIANPOINT((0.0999999940395355,0.0500000007450581,1.10000002384186)); +#103=IFCCARTESIANPOINT((0.800000011920929,0.0500000007450581,1.10000002384186)); +#104=IFCCARTESIANPOINT((0.800000011920929,0.0500000007450581,0.0999999940395355)); +#105=IFCCARTESIANPOINT((0.,0.0500000007450581,0.)); +#106=IFCCARTESIANPOINT((0.,0.0500000007450581,1.20000004768372)); +#107=IFCCARTESIANPOINT((0.899999976158142,0.0500000007450581,1.20000004768372)); +#108=IFCCARTESIANPOINT((0.899999976158142,0.0500000007450581,0.)); +#109=IFCCARTESIANPOINT((0.0999999940395355,0.0299999993294477,0.0999999940395355)); +#110=IFCCARTESIANPOINT((0.0999999940395355,0.0299999993294477,1.10000002384186)); +#111=IFCCARTESIANPOINT((0.800000011920929,0.0299999993294477,1.10000002384186)); +#112=IFCCARTESIANPOINT((0.800000011920929,0.0299999993294477,0.0999999940395355)); +#113=IFCPOLYLOOP((#101,#105,#106,#102)); +#114=IFCFACEOUTERBOUND(#113,.T.); +#115=IFCFACE((#114)); +#116=IFCPOLYLOOP((#93,#94,#91,#92)); +#117=IFCFACEOUTERBOUND(#116,.T.); +#118=IFCFACE((#117)); +#119=IFCPOLYLOOP((#95,#96,#90,#89)); +#120=IFCFACEOUTERBOUND(#119,.T.); +#121=IFCFACE((#120)); +#122=IFCPOLYLOOP((#94,#95,#89,#91)); +#123=IFCFACEOUTERBOUND(#122,.T.); +#124=IFCFACE((#123)); +#125=IFCPOLYLOOP((#96,#93,#92,#90)); +#126=IFCFACEOUTERBOUND(#125,.T.); +#127=IFCFACE((#126)); +#128=IFCPOLYLOOP((#100,#99,#98,#97)); +#129=IFCFACEOUTERBOUND(#128,.T.); +#130=IFCFACE((#129)); +#131=IFCPOLYLOOP((#103,#107,#108,#104)); +#132=IFCFACEOUTERBOUND(#131,.T.); +#133=IFCFACE((#132)); +#134=IFCPOLYLOOP((#102,#106,#107,#103)); +#135=IFCFACEOUTERBOUND(#134,.T.); +#136=IFCFACE((#135)); +#137=IFCPOLYLOOP((#104,#108,#105,#101)); +#138=IFCFACEOUTERBOUND(#137,.T.); +#139=IFCFACE((#138)); +#140=IFCPOLYLOOP((#92,#105,#108,#90)); +#141=IFCFACEOUTERBOUND(#140,.T.); +#142=IFCFACE((#141)); +#143=IFCPOLYLOOP((#90,#108,#107,#89)); +#144=IFCFACEOUTERBOUND(#143,.T.); +#145=IFCFACE((#144)); +#146=IFCPOLYLOOP((#96,#104,#101,#93)); +#147=IFCFACEOUTERBOUND(#146,.T.); +#148=IFCFACE((#147)); +#149=IFCPOLYLOOP((#95,#103,#104,#96)); +#150=IFCFACEOUTERBOUND(#149,.T.); +#151=IFCFACE((#150)); +#152=IFCPOLYLOOP((#89,#107,#106,#91)); +#153=IFCFACEOUTERBOUND(#152,.T.); +#154=IFCFACE((#153)); +#155=IFCPOLYLOOP((#91,#106,#105,#92)); +#156=IFCFACEOUTERBOUND(#155,.T.); +#157=IFCFACE((#156)); +#158=IFCPOLYLOOP((#94,#102,#103,#95)); +#159=IFCFACEOUTERBOUND(#158,.T.); +#160=IFCFACE((#159)); +#161=IFCPOLYLOOP((#93,#101,#102,#94)); +#162=IFCFACEOUTERBOUND(#161,.T.); +#163=IFCFACE((#162)); +#164=IFCPOLYLOOP((#112,#109,#110,#111)); +#165=IFCFACEOUTERBOUND(#164,.T.); +#166=IFCFACE((#165)); +#167=IFCPOLYLOOP((#99,#111,#110,#98)); +#168=IFCFACEOUTERBOUND(#167,.T.); +#169=IFCFACE((#168)); +#170=IFCPOLYLOOP((#98,#110,#109,#97)); +#171=IFCFACEOUTERBOUND(#170,.T.); +#172=IFCFACE((#171)); +#173=IFCPOLYLOOP((#97,#109,#112,#100)); +#174=IFCFACEOUTERBOUND(#173,.T.); +#175=IFCFACE((#174)); +#176=IFCPOLYLOOP((#100,#112,#111,#99)); +#177=IFCFACEOUTERBOUND(#176,.T.); +#178=IFCFACE((#177)); +#179=IFCCLOSEDSHELL((#115,#118,#121,#124,#127,#133,#136,#139,#142,#145,#148,#151,#154,#157,#160,#163)); +#180=IFCFACETEDBREP(#179); +#181=IFCCLOSEDSHELL((#130,#166,#169,#172,#175,#178)); +#182=IFCFACETEDBREP(#181); +#183=IFCSHAPEREPRESENTATION(#23,'Body','Brep',(#180,#182)); +#184=IFCSURFACESTYLE('Frame',.BOTH.,(#185)); +#185=IFCSURFACESTYLESHADING(#186); +#186=IFCCOLOURRGB($,0.0429765619337559,0.0429765619337559,0.0429765619337559); +#187=IFCSURFACESTYLE('Glass',.BOTH.,(#188)); +#188=IFCSURFACESTYLESHADING(#189); +#189=IFCCOLOURRGB($,0.800000011920929,1.,1.); +#190=IFCPRESENTATIONSTYLEASSIGNMENT((#184)); +#191=IFCSTYLEDITEM(#180,(#190),'Frame'); +#192=IFCPRESENTATIONSTYLEASSIGNMENT((#187)); +#193=IFCSTYLEDITEM(#182,(#192),'Glass'); +#194=IFCCARTESIANPOINT((0.,0.,0.)); +#195=IFCDIRECTION((1.,0.,0.)); +#196=IFCDIRECTION((0.,0.,1.)); +#197=IFCAXIS2PLACEMENT3D(#194,#196,#195); +#198=IFCREPRESENTATIONMAP(#197,#183); +#199=IFCCARTESIANPOINT((0.100000023841858,0.0200000032782555)); +#200=IFCCARTESIANPOINT((0.800000011920929,0.0200000032782555)); +#201=IFCCARTESIANPOINT((0.800000011920929,0.0300000011920929)); +#202=IFCCARTESIANPOINT((0.100000023841858,0.0300000011920929)); +#203=IFCCARTESIANPOINT((0.100000023841858,0.0200000032782555)); +#204=IFCPOLYLINE((#199,#200,#201,#202,#203)); +#205=IFCCARTESIANPOINT((0.899999976158142,0.0500000007450581)); +#206=IFCCARTESIANPOINT((0.800000011920929,0.0500000007450581)); +#207=IFCCARTESIANPOINT((0.800000011920929,0.)); +#208=IFCCARTESIANPOINT((0.899999976158142,0.)); +#209=IFCCARTESIANPOINT((0.899999976158142,0.0500000007450581)); +#210=IFCPOLYLINE((#205,#206,#207,#208,#209)); +#211=IFCCARTESIANPOINT((0.,0.)); +#212=IFCCARTESIANPOINT((0.100000023841858,0.)); +#213=IFCCARTESIANPOINT((0.100000023841858,0.0500000007450581)); +#214=IFCCARTESIANPOINT((0.,0.0500000007450581)); +#215=IFCCARTESIANPOINT((0.,0.)); +#216=IFCPOLYLINE((#211,#212,#213,#214,#215)); +#217=IFCCARTESIANPOINT((0.100000023841858,0.0500000007450581)); +#218=IFCCARTESIANPOINT((0.800000011920929,0.0500000007450581)); +#219=IFCPOLYLINE((#217,#218)); +#220=IFCCARTESIANPOINT((0.100000023841858,0.)); +#221=IFCCARTESIANPOINT((0.800000011920929,0.)); +#222=IFCPOLYLINE((#220,#221)); +#223=IFCGEOMETRICCURVESET((#204,#210,#216,#219,#222)); +#224=IFCSHAPEREPRESENTATION(#24,'Body','Annotation2D',(#223)); +#225=IFCCARTESIANPOINT((0.,0.,0.)); +#226=IFCDIRECTION((1.,0.,0.)); +#227=IFCDIRECTION((0.,0.,1.)); +#228=IFCAXIS2PLACEMENT3D(#225,#227,#226); +#229=IFCREPRESENTATIONMAP(#228,#224); +#230=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1743078627,#3,#7,1743078627); +#231=IFCDOORSTYLE('2j0vIBgkH0ERnBCP0cpcCz',#230,'DT01',$,$,$,(#361,#402),$,.NOTDEFINED.,.NOTDEFINED.,.F.,.F.); +#232=IFCCARTESIANPOINT((0.955000162124634,0.,2.09000015258789)); +#233=IFCCARTESIANPOINT((0.955000162124634,0.0549999885261059,2.09000015258789)); +#234=IFCCARTESIANPOINT((0.970000028610229,0.0549999922513962,2.10500001907349)); +#235=IFCCARTESIANPOINT((0.,0.0999999940395355,0.)); +#236=IFCCARTESIANPOINT((0.970000028610229,0.0999999940395355,2.10500001907349)); +#237=IFCCARTESIANPOINT((0.0399999916553497,0.0999999940395355,2.10500001907349)); +#238=IFCCARTESIANPOINT((0.0399999916553497,0.0549999922513962,2.10500001907349)); +#239=IFCCARTESIANPOINT((0.0550000071525574,0.0549999885261059,2.09000015258789)); +#240=IFCCARTESIANPOINT((0.0550000071525574,0.,2.09000015258789)); +#241=IFCCARTESIANPOINT((0.,0.,2.14500021934509)); +#242=IFCCARTESIANPOINT((0.,0.100000001490116,2.14500021934509)); +#243=IFCCARTESIANPOINT((0.0449999868869781,0.0999999940395355,2.09999990463257)); +#244=IFCCARTESIANPOINT((0.0449999868869781,0.0599999949336052,2.09999990463257)); +#245=IFCCARTESIANPOINT((0.965000033378601,0.0599999949336052,2.09999990463257)); +#246=IFCCARTESIANPOINT((0.965000033378601,0.0999999940395355,2.09999990463257)); +#247=IFCCARTESIANPOINT((0.965000033378601,0.0999999940395355,0.)); +#248=IFCCARTESIANPOINT((0.965000033378601,0.0599999949336052,0.)); +#249=IFCCARTESIANPOINT((0.0449999868869781,0.0599999949336052,0.)); +#250=IFCCARTESIANPOINT((0.0449999868869781,0.0999999940395355,0.)); +#251=IFCCARTESIANPOINT((0.,0.,0.)); +#252=IFCCARTESIANPOINT((0.0550000071525574,0.,0.)); +#253=IFCCARTESIANPOINT((0.0550000071525574,0.0549999922513962,0.)); +#254=IFCCARTESIANPOINT((0.0399999916553497,0.0549999922513962,0.)); +#255=IFCCARTESIANPOINT((0.0399999916553497,0.0999999940395355,0.)); +#256=IFCCARTESIANPOINT((1.01000034809113,0.,2.14500021934509)); +#257=IFCCARTESIANPOINT((1.01000034809113,0.100000001490116,2.14500021934509)); +#258=IFCCARTESIANPOINT((0.955000162124634,0.,0.)); +#259=IFCCARTESIANPOINT((0.955000162124634,0.0549999885261059,0.)); +#260=IFCCARTESIANPOINT((0.970000028610229,0.0549999922513962,0.)); +#261=IFCCARTESIANPOINT((0.970000028610229,0.0999999940395355,0.)); +#262=IFCCARTESIANPOINT((1.01000034809113,0.,0.)); +#263=IFCCARTESIANPOINT((1.01000034809113,0.100000001490116,0.)); +#264=IFCPOLYLOOP((#248,#247,#246,#245)); +#265=IFCFACEOUTERBOUND(#264,.T.); +#266=IFCFACE((#265)); +#267=IFCPOLYLOOP((#233,#234,#260,#259)); +#268=IFCFACEOUTERBOUND(#267,.T.); +#269=IFCFACE((#268)); +#270=IFCPOLYLOOP((#258,#259,#260,#261,#263,#262)); +#271=IFCFACEOUTERBOUND(#270,.T.); +#272=IFCFACE((#271)); +#273=IFCPOLYLOOP((#238,#237,#236,#234)); +#274=IFCFACEOUTERBOUND(#273,.T.); +#275=IFCFACE((#274)); +#276=IFCPOLYLOOP((#239,#238,#234,#233)); +#277=IFCFACEOUTERBOUND(#276,.T.); +#278=IFCFACE((#277)); +#279=IFCPOLYLOOP((#254,#255,#237,#238)); +#280=IFCFACEOUTERBOUND(#279,.T.); +#281=IFCFACE((#280)); +#282=IFCPOLYLOOP((#252,#251,#235,#255,#254,#253)); +#283=IFCFACEOUTERBOUND(#282,.T.); +#284=IFCFACE((#283)); +#285=IFCPOLYLOOP((#243,#244,#245,#246)); +#286=IFCFACEOUTERBOUND(#285,.T.); +#287=IFCFACE((#286)); +#288=IFCPOLYLOOP((#247,#250,#243,#246)); +#289=IFCFACEOUTERBOUND(#288,.T.); +#290=IFCFACE((#289)); +#291=IFCPOLYLOOP((#242,#241,#256,#257)); +#292=IFCFACEOUTERBOUND(#291,.T.); +#293=IFCFACE((#292)); +#294=IFCPOLYLOOP((#256,#232,#258,#262)); +#295=IFCFACEOUTERBOUND(#294,.T.); +#296=IFCFACE((#295)); +#297=IFCPOLYLOOP((#255,#235,#242,#237)); +#298=IFCFACEOUTERBOUND(#297,.T.); +#299=IFCFACE((#298)); +#300=IFCPOLYLOOP((#251,#252,#240,#241)); +#301=IFCFACEOUTERBOUND(#300,.T.); +#302=IFCFACE((#301)); +#303=IFCPOLYLOOP((#240,#239,#233,#232)); +#304=IFCFACEOUTERBOUND(#303,.T.); +#305=IFCFACE((#304)); +#306=IFCPOLYLOOP((#241,#240,#232,#256)); +#307=IFCFACEOUTERBOUND(#306,.T.); +#308=IFCFACE((#307)); +#309=IFCPOLYLOOP((#253,#254,#238,#239)); +#310=IFCFACEOUTERBOUND(#309,.T.); +#311=IFCFACE((#310)); +#312=IFCPOLYLOOP((#235,#251,#241,#242)); +#313=IFCFACEOUTERBOUND(#312,.T.); +#314=IFCFACE((#313)); +#315=IFCPOLYLOOP((#250,#247,#248,#249)); +#316=IFCFACEOUTERBOUND(#315,.T.); +#317=IFCFACE((#316)); +#318=IFCPOLYLOOP((#250,#249,#244,#243)); +#319=IFCFACEOUTERBOUND(#318,.T.); +#320=IFCFACE((#319)); +#321=IFCPOLYLOOP((#252,#253,#239,#240)); +#322=IFCFACEOUTERBOUND(#321,.T.); +#323=IFCFACE((#322)); +#324=IFCPOLYLOOP((#237,#242,#257,#236)); +#325=IFCFACEOUTERBOUND(#324,.T.); +#326=IFCFACE((#325)); +#327=IFCPOLYLOOP((#249,#248,#245,#244)); +#328=IFCFACEOUTERBOUND(#327,.T.); +#329=IFCFACE((#328)); +#330=IFCPOLYLOOP((#236,#257,#263,#261)); +#331=IFCFACEOUTERBOUND(#330,.T.); +#332=IFCFACE((#331)); +#333=IFCPOLYLOOP((#232,#233,#259,#258)); +#334=IFCFACEOUTERBOUND(#333,.T.); +#335=IFCFACE((#334)); +#336=IFCPOLYLOOP((#257,#256,#262,#263)); +#337=IFCFACEOUTERBOUND(#336,.T.); +#338=IFCFACE((#337)); +#339=IFCPOLYLOOP((#234,#236,#261,#260)); +#340=IFCFACEOUTERBOUND(#339,.T.); +#341=IFCFACE((#340)); +#342=IFCCLOSEDSHELL((#269,#272,#275,#278,#281,#284,#293,#296,#299,#302,#305,#308,#311,#314,#323,#326,#332,#335,#338,#341)); +#343=IFCFACETEDBREP(#342); +#344=IFCCLOSEDSHELL((#266,#287,#290,#317,#320,#329)); +#345=IFCFACETEDBREP(#344); +#346=IFCSHAPEREPRESENTATION(#23,'Body','Brep',(#343,#345)); +#347=IFCSURFACESTYLE('Frame',.BOTH.,(#348)); +#348=IFCSURFACESTYLESHADING(#349); +#349=IFCCOLOURRGB($,0.0429765619337559,0.0429765619337559,0.0429765619337559); +#350=IFCSURFACESTYLE('Panel',.BOTH.,(#351)); +#351=IFCSURFACESTYLESHADING(#352); +#352=IFCCOLOURRGB($,0.184475064277649,0.184475019574165,0.184475019574165); +#353=IFCPRESENTATIONSTYLEASSIGNMENT((#347)); +#354=IFCSTYLEDITEM(#343,(#353),'Frame'); +#355=IFCPRESENTATIONSTYLEASSIGNMENT((#350)); +#356=IFCSTYLEDITEM(#345,(#355),'Panel'); +#357=IFCCARTESIANPOINT((0.,0.,0.)); +#358=IFCDIRECTION((1.,0.,0.)); +#359=IFCDIRECTION((0.,0.,1.)); +#360=IFCAXIS2PLACEMENT3D(#357,#359,#358); +#361=IFCREPRESENTATIONMAP(#360,#346); +#362=IFCCARTESIANPOINT((0.964999914169312,1.0200001001358)); +#363=IFCCARTESIANPOINT((0.965000033378601,0.0999999940395355)); +#364=IFCCARTESIANPOINT((0.925000011920929,0.0999999940395355)); +#365=IFCCARTESIANPOINT((0.924999952316284,1.0200001001358)); +#366=IFCCARTESIANPOINT((0.964999914169312,1.0200001001358)); +#367=IFCCARTESIANPOINT((0.844915807247162,1.01212930679321)); +#368=IFCCARTESIANPOINT((0.726886332035065,0.988651752471924)); +#369=IFCCARTESIANPOINT((0.612931072711945,0.949969172477722)); +#370=IFCCARTESIANPOINT((0.504999756813049,0.896743297576904)); +#371=IFCCARTESIANPOINT((0.404939234256744,0.829885005950928)); +#372=IFCCARTESIANPOINT((0.314461469650269,0.750538170337677)); +#373=IFCCARTESIANPOINT((0.235114604234695,0.660060405731201)); +#374=IFCCARTESIANPOINT((0.168256282806396,0.559999823570251)); +#375=IFCCARTESIANPOINT((0.115030474960804,0.452068567276001)); +#376=IFCCARTESIANPOINT((0.0763478726148605,0.338113307952881)); +#377=IFCCARTESIANPOINT((0.0528703518211842,0.220083817839622)); +#378=IFCCARTESIANPOINT((0.0449996180832386,0.099999688565731)); +#379=IFCPOLYLINE((#362,#363,#364,#365,#366,#367,#368,#369,#370,#371,#372,#373,#374,#375,#376,#377,#378)); +#380=IFCCARTESIANPOINT((0.970000028610229,0.0549999922513962)); +#381=IFCCARTESIANPOINT((0.955000162124634,0.0549999922513962)); +#382=IFCCARTESIANPOINT((0.955000162124634,0.)); +#383=IFCCARTESIANPOINT((1.01000034809113,0.)); +#384=IFCCARTESIANPOINT((1.01000034809113,0.0999999940395355)); +#385=IFCCARTESIANPOINT((0.970000028610229,0.0999999940395355)); +#386=IFCCARTESIANPOINT((0.970000028610229,0.0549999922513962)); +#387=IFCPOLYLINE((#380,#381,#382,#383,#384,#385,#386)); +#388=IFCCARTESIANPOINT((0.,0.)); +#389=IFCCARTESIANPOINT((0.,0.0999999940395355)); +#390=IFCCARTESIANPOINT((0.0399999916553497,0.0999999940395355)); +#391=IFCCARTESIANPOINT((0.0399999916553497,0.0549999922513962)); +#392=IFCCARTESIANPOINT((0.0550000071525574,0.0549999922513962)); +#393=IFCCARTESIANPOINT((0.0550000071525574,0.)); +#394=IFCCARTESIANPOINT((0.,0.)); +#395=IFCPOLYLINE((#388,#389,#390,#391,#392,#393,#394)); +#396=IFCGEOMETRICCURVESET((#379,#387,#395)); +#397=IFCSHAPEREPRESENTATION(#24,'Body','Annotation2D',(#396)); +#398=IFCCARTESIANPOINT((0.,0.,0.)); +#399=IFCDIRECTION((1.,0.,0.)); +#400=IFCDIRECTION((0.,0.,1.)); +#401=IFCAXIS2PLACEMENT3D(#398,#400,#399); +#402=IFCREPRESENTATIONMAP(#401,#397); +#403=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1743078627,#3,#7,1743078627); +#404=IFCFURNITURETYPE('02XxQ_3oT0SPrmFPATrt7o',#403,'BUN01',$,$,$,(#2926,#3007),$,$,.NOTDEFINED.); +#405=IFCCARTESIANPOINT((-0.0757642686367035,-0.0121694896370173,0.220662087202072)); +#406=IFCCARTESIANPOINT((-0.105255022644997,-0.0141069469973445,0.230906546115875)); +#407=IFCCARTESIANPOINT((-0.164038479328156,-0.0962571799755096,0.263201057910919)); +#408=IFCCARTESIANPOINT((-0.0149683114141226,-0.0434482358396053,0.228664547204971)); +#409=IFCCARTESIANPOINT((-0.0426693223416805,-0.0120228659361601,0.222334340214729)); +#410=IFCCARTESIANPOINT((0.0788992568850517,-0.0767349451780319,0.173714026808739)); +#411=IFCCARTESIANPOINT((0.0953715369105339,-0.0409212671220303,0.16986283659935)); +#412=IFCCARTESIANPOINT((-0.0719772353768349,-0.0949608311057091,0.171763256192207)); +#413=IFCCARTESIANPOINT((0.0735535696148872,-0.0462111458182335,0.199328601360321)); +#414=IFCCARTESIANPOINT((-0.160245850682259,0.0397466160356998,0.298533588647842)); +#415=IFCCARTESIANPOINT((0.106730677187443,-0.0124975387006998,0.138676866889)); +#416=IFCCARTESIANPOINT((0.0139651391655207,-0.0423045344650745,0.229461222887039)); +#417=IFCCARTESIANPOINT((0.0967235639691353,-0.0144418459385633,0.168111309409142)); +#418=IFCCARTESIANPOINT((-0.219927728176117,-0.0414205342531204,0.239053592085838)); +#419=IFCCARTESIANPOINT((-0.198184996843338,-0.0742136090993881,0.172668352723122)); +#420=IFCCARTESIANPOINT((-0.162167191505432,-0.0434498824179173,0.289568781852722)); +#421=IFCCARTESIANPOINT((-0.189809292554855,-0.0716947764158249,0.281713783740997)); +#422=IFCCARTESIANPOINT((0.0152298724278808,-0.0849794447422028,0.205268412828445)); +#423=IFCCARTESIANPOINT((-0.123513199388981,-0.0452961064875126,0.264716774225235)); +#424=IFCCARTESIANPOINT((-0.188629180192947,-0.119135543704033,0.233101561665535)); +#425=IFCCARTESIANPOINT((-0.0130218090489507,-0.0651145428419113,0.222954735159874)); +#426=IFCCARTESIANPOINT((-0.196876853704453,0.0119782146066427,0.138698890805244)); +#427=IFCCARTESIANPOINT((0.0431601963937283,-0.0451620146632195,0.22145189344883)); +#428=IFCCARTESIANPOINT((-0.216075524687767,-0.016599427908659,0.204968154430389)); +#429=IFCCARTESIANPOINT((-0.0582821778953075,0.0224160328507423,0.331800371408463)); +#430=IFCCARTESIANPOINT((-0.190823614597321,-0.102445237338543,0.260164886713028)); +#431=IFCCARTESIANPOINT((-0.0431380830705166,-0.0991964489221573,0.176975786685944)); +#432=IFCCARTESIANPOINT((-0.0522686094045639,0.0494366958737373,0.351232975721359)); +#433=IFCCARTESIANPOINT((-0.0895938724279404,0.0322130136191845,0.318689584732056)); +#434=IFCCARTESIANPOINT((0.013082567602396,-0.0668555349111557,0.223062723875046)); +#435=IFCCARTESIANPOINT((-0.106145963072777,-0.0415130592882633,0.22882467508316)); +#436=IFCCARTESIANPOINT((0.0448657646775246,-0.0776780471205711,0.203667193651199)); +#437=IFCCARTESIANPOINT((-0.10371295362711,-0.00366749544627964,0.314385384321213)); +#438=IFCCARTESIANPOINT((-0.21360756456852,-0.0169711355119944,0.233581200242043)); +#439=IFCCARTESIANPOINT((-0.138989388942719,-0.0749303176999092,0.265050023794174)); +#440=IFCCARTESIANPOINT((0.105769321322441,-0.0415658876299858,0.138697892427444)); +#441=IFCCARTESIANPOINT((0.0992072820663452,-0.0677607133984566,0.138679757714272)); +#442=IFCCARTESIANPOINT((-0.135680645704269,-0.0402409471571445,0.287896603345871)); +#443=IFCCARTESIANPOINT((-0.17496183514595,-0.0425181090831757,0.0743281096220016)); +#444=IFCCARTESIANPOINT((-0.161954745650291,-0.0129314502701163,0.289540559053421)); +#445=IFCCARTESIANPOINT((-0.208628505468369,-0.103418782353401,0.201527774333954)); +#446=IFCCARTESIANPOINT((0.0640031322836876,-0.0677034556865692,0.197900995612144)); +#447=IFCCARTESIANPOINT((0.100172616541386,0.0126537960022688,0.138708665966988)); +#448=IFCCARTESIANPOINT((-0.168615952134132,0.0482185557484627,0.30722576379776)); +#449=IFCCARTESIANPOINT((-0.0140691194683313,-0.0847146064043045,0.205532997846603)); +#450=IFCCARTESIANPOINT((0.0702492073178291,-0.1020467877388,0.138582319021225)); +#451=IFCCARTESIANPOINT((-0.181213811039925,0.0992056727409363,0.328065633773804)); +#452=IFCCARTESIANPOINT((-0.0152021609246731,-0.112156376242638,0.0183885656297207)); +#453=IFCCARTESIANPOINT((0.0162124074995518,-0.111216500401497,0.021827794611454)); +#454=IFCCARTESIANPOINT((-0.133747041225433,-0.0159911345690489,0.290624916553497)); +#455=IFCCARTESIANPOINT((-0.216561943292618,-0.0709330290555954,0.202728658914566)); +#456=IFCCARTESIANPOINT((-0.0427242144942284,-0.0426300838589668,0.222017183899879)); +#457=IFCCARTESIANPOINT((-0.159124106168747,-0.0738818794488907,0.283847242593765)); +#458=IFCCARTESIANPOINT((-0.103956542909145,0.0154779236763716,0.320181280374527)); +#459=IFCCARTESIANPOINT((-0.136982098221779,-0.102321907877922,0.0194435473531485)); +#460=IFCCARTESIANPOINT((-0.183684900403023,0.0396271869540215,0.295159220695496)); +#461=IFCCARTESIANPOINT((-0.107928916811943,-0.010153891518712,0.291135489940643)); +#462=IFCCARTESIANPOINT((-0.103886745870113,-0.101836994290352,0.0180104468017817)); +#463=IFCCARTESIANPOINT((-0.0461161360144615,-0.119219377636909,0.138967230916023)); +#464=IFCCARTESIANPOINT((-0.0461340732872486,-0.061420276761055,0.21500451862812)); +#465=IFCCARTESIANPOINT((-0.211329713463783,-0.0169732719659805,0.138692498207092)); +#466=IFCCARTESIANPOINT((-0.165825873613358,0.0170033983886242,0.294365167617798)); +#467=IFCCARTESIANPOINT((-0.162926822900772,0.0167535953223705,0.259086668491364)); +#468=IFCCARTESIANPOINT((0.044605728238821,-0.0985531806945801,0.171382486820221)); +#469=IFCCARTESIANPOINT((-0.0834082290530205,0.00335463741794229,0.315553486347198)); +#470=IFCCARTESIANPOINT((-0.15971240401268,0.0247225016355515,0.197611734271049)); +#471=IFCCARTESIANPOINT((-0.16489240527153,0.105032727122307,0.322820842266083)); +#472=IFCCARTESIANPOINT((-0.215148985385895,-0.0462404675781727,0.266269713640213)); +#473=IFCCARTESIANPOINT((0.074162483215332,0.0414574705064297,0.138786911964417)); +#474=IFCCARTESIANPOINT((0.0142031144350767,-0.105447888374329,0.170478105545044)); +#475=IFCCARTESIANPOINT((0.0141690038144588,-0.0131895141676068,0.229208543896675)); +#476=IFCCARTESIANPOINT((0.0433205515146255,-0.101634204387665,0.0178499221801758)); +#477=IFCCARTESIANPOINT((-0.194831639528275,0.00855887122452259,0.19867131114006)); +#478=IFCCARTESIANPOINT((-0.190071240067482,0.00837886054068804,0.263859361410141)); +#479=IFCCARTESIANPOINT((0.0146396514028311,0.0503562577068806,0.171330958604813)); +#480=IFCCARTESIANPOINT((-0.0466328002512455,-0.0789417400956154,0.203323245048523)); +#481=IFCCARTESIANPOINT((-0.0142267476767302,-0.0157651714980602,0.22864143550396)); +#482=IFCCARTESIANPOINT((-0.214272990822792,-0.0700500085949898,0.258544147014618)); +#483=IFCCARTESIANPOINT((-0.0187377445399761,0.0234869290143251,0.211539566516876)); +#484=IFCCARTESIANPOINT((-0.169090524315834,0.130419373512268,0.343455374240875)); +#485=IFCCARTESIANPOINT((-0.0730840340256691,-0.0585213899612427,0.211252138018608)); +#486=IFCCARTESIANPOINT((-0.211533859372139,-0.0429056100547314,0.138715773820877)); +#487=IFCCARTESIANPOINT((-0.0739177912473679,0.0154376216232777,0.210008263587952)); +#488=IFCCARTESIANPOINT((-0.07377789914608,-0.0735882744193077,0.200627535581589)); +#489=IFCCARTESIANPOINT((-0.186267927289009,-0.121167339384556,0.205986142158508)); +#490=IFCCARTESIANPOINT((0.0892870724201202,0.0163372419774532,0.167569145560265)); +#491=IFCCARTESIANPOINT((-0.163796290755272,0.0387952998280525,0.138641089200974)); +#492=IFCCARTESIANPOINT((-0.197594255208969,-0.07469642162323,0.138668864965439)); +#493=IFCCARTESIANPOINT((-0.157580107450485,0.132616892457008,0.328512966632843)); +#494=IFCCARTESIANPOINT((-0.0735077708959579,0.0393004417419434,0.326341509819031)); +#495=IFCCARTESIANPOINT((-0.133432641625404,-0.0800390690565109,0.240147277712822)); +#496=IFCCARTESIANPOINT((-0.161642774939537,-0.107512913644314,0.235317841172218)); +#497=IFCCARTESIANPOINT((-0.103187024593353,0.0151489116251469,0.293316811323166)); +#498=IFCCARTESIANPOINT((-0.131257891654968,-0.0962524563074112,0.0883080363273621)); +#499=IFCCARTESIANPOINT((-0.0977480411529541,0.0540151223540306,0.138882651925087)); +#500=IFCCARTESIANPOINT((-0.015323237515986,-0.12871652841568,0.138334348797798)); +#501=IFCCARTESIANPOINT((0.102820813655853,-0.0720862969756126,0.0782168358564377)); +#502=IFCCARTESIANPOINT((0.0691742300987244,0.00961552746593952,0.196848139166832)); +#503=IFCCARTESIANPOINT((-0.0784864947199821,-0.104707300662994,0.0244421008974314)); +#504=IFCCARTESIANPOINT((-0.129387423396111,-0.0837726294994354,0.201711267232895)); +#505=IFCCARTESIANPOINT((0.10028512775898,0.0147631969302893,0.106750056147575)); +#506=IFCCARTESIANPOINT((0.0725274235010147,-0.0733503252267838,0.0162904672324657)); +#507=IFCCARTESIANPOINT((0.0907945036888123,-0.0631996393203735,0.166820541024208)); +#508=IFCCARTESIANPOINT((-0.0685850381851196,0.0688069462776184,0.138255223631859)); +#509=IFCCARTESIANPOINT((-0.0430277064442635,-0.107757613062859,0.022122398018837)); +#510=IFCCARTESIANPOINT((0.102449595928192,-0.0650743395090103,0.0278087817132473)); +#511=IFCCARTESIANPOINT((-0.0123228346928954,-0.128916323184967,0.0516869872808456)); +#512=IFCCARTESIANPOINT((0.0133168455213308,-0.126367673277855,0.0497013293206692)); +#513=IFCCARTESIANPOINT((-0.211436733603477,-0.0425778105854988,0.171008050441742)); +#514=IFCCARTESIANPOINT((-0.135128378868103,-0.0737440511584282,0.028781833127141)); +#515=IFCCARTESIANPOINT((-0.0713493376970291,-0.0974928066134453,0.048680767416954)); +#516=IFCCARTESIANPOINT((-0.0144545361399651,-0.10740352421999,0.169533520936966)); +#517=IFCCARTESIANPOINT((-0.0520200654864311,-0.106458351016045,0.0468626022338867)); +#518=IFCCARTESIANPOINT((-0.0383422300219536,-0.121899470686913,0.0537898242473602)); +#519=IFCCARTESIANPOINT((-0.135303497314453,0.00472360569983721,0.269406676292419)); +#520=IFCCARTESIANPOINT((-0.222012773156166,-0.0435851588845253,0.201951056718826)); +#521=IFCCARTESIANPOINT((-0.150152832269669,0.0706916153430939,0.296226799488068)); +#522=IFCCARTESIANPOINT((-0.205232128500938,-0.0530128739774227,0.172492980957031)); +#523=IFCCARTESIANPOINT((0.0815067514777184,-0.0842671692371368,0.0463023483753204)); +#524=IFCCARTESIANPOINT((0.101917430758476,-0.0744422674179077,0.0511590167880058)); +#525=IFCCARTESIANPOINT((-0.104162633419037,-0.0769466981291771,0.197300210595131)); +#526=IFCCARTESIANPOINT((-0.165175527334213,0.100392691791058,0.295828104019165)); +#527=IFCCARTESIANPOINT((0.0624474883079529,-0.0914158597588539,0.172223627567291)); +#528=IFCCARTESIANPOINT((-0.0696270391345024,0.0371879562735558,0.345104366540909)); +#529=IFCCARTESIANPOINT((-0.129096910357475,-0.0715842396020889,0.0532362163066864)); +#530=IFCCARTESIANPOINT((-0.102229714393616,-0.0918472409248352,0.0500270053744316)); +#531=IFCCARTESIANPOINT((0.0328243598341942,-0.0628630220890045,0.219847500324249)); +#532=IFCCARTESIANPOINT((-0.0929397568106651,-0.0598123446106911,0.212814390659332)); +#533=IFCCARTESIANPOINT((-0.140351414680481,-0.0651696026325226,0.281688511371613)); +#534=IFCCARTESIANPOINT((-0.0299176927655935,0.0646412074565887,0.345614969730377)); +#535=IFCCARTESIANPOINT((-0.210334226489067,-0.019161444157362,0.170468419790268)); +#536=IFCCARTESIANPOINT((-0.189835593104362,-0.0147899463772774,0.284663945436478)); +#537=IFCCARTESIANPOINT((-0.0706062465906143,-0.0353134833276272,0.219783633947372)); +#538=IFCCARTESIANPOINT((-0.196250692009926,-0.0419037826359272,0.286000579595566)); +#539=IFCCARTESIANPOINT((-0.189289301633835,0.015417193993926,0.167268991470337)); +#540=IFCCARTESIANPOINT((-0.165491297841072,0.119253136217594,0.309156060218811)); +#541=IFCCARTESIANPOINT((-0.188711583614349,-0.0422543436288834,0.0857931450009346)); +#542=IFCCARTESIANPOINT((-0.137549817562103,-0.0175594426691532,0.048555850982666)); +#543=IFCCARTESIANPOINT((-0.0439321398735046,0.0188035927712917,0.209587976336479)); +#544=IFCCARTESIANPOINT((-0.166142821311951,0.0438390895724297,0.269286632537842)); +#545=IFCCARTESIANPOINT((-0.100659042596817,0.0212050415575504,0.210695147514343)); +#546=IFCCARTESIANPOINT((-0.165524810552597,0.0681574642658234,0.275103896856308)); +#547=IFCCARTESIANPOINT((-0.131917878985405,-0.0432314537465572,0.0469778589904308)); +#548=IFCCARTESIANPOINT((-0.0393056124448776,-0.127956256270409,0.0805243328213692)); +#549=IFCCARTESIANPOINT((-0.0148295955732465,-0.134464859962463,0.078124076128006)); +#550=IFCCARTESIANPOINT((0.0156515818089247,-0.132012516260147,0.0775675550103188)); +#551=IFCCARTESIANPOINT((0.128680378198624,-0.0638554841279984,0.0486980155110359)); +#552=IFCCARTESIANPOINT((0.011726126074791,-0.12689021229744,0.138521879911423)); +#553=IFCCARTESIANPOINT((-0.104669205844402,-0.0973712056875229,0.0786209478974342)); +#554=IFCCARTESIANPOINT((-0.0722803771495819,-0.0994613841176033,0.0782437026500702)); +#555=IFCCARTESIANPOINT((-0.0900976955890656,0.0289249792695045,0.304527103900909)); +#556=IFCCARTESIANPOINT((-0.131665915250778,-0.0805337652564049,0.0729337483644485)); +#557=IFCCARTESIANPOINT((-0.17888680100441,0.0127522293478251,0.288278430700302)); +#558=IFCCARTESIANPOINT((-0.131906762719154,0.0216084867715836,0.211986422538757)); +#559=IFCCARTESIANPOINT((0.0438910871744156,0.0446652211248875,0.170035198330879)); +#560=IFCCARTESIANPOINT((0.126842275261879,-0.0620891898870468,0.0720244571566582)); +#561=IFCCARTESIANPOINT((-0.181458547711372,0.0720020085573196,0.30515855550766)); +#562=IFCCARTESIANPOINT((-0.105359517037868,0.0106867477297783,0.222205132246017)); +#563=IFCCARTESIANPOINT((-0.0755681917071342,-0.105624243617058,0.10775239020586)); +#564=IFCCARTESIANPOINT((-0.130771055817604,0.0436740666627884,0.171749204397202)); +#565=IFCCARTESIANPOINT((-0.133024662733078,0.049973726272583,0.138679206371307)); +#566=IFCCARTESIANPOINT((-0.11655567586422,-0.016352504491806,0.262825727462769)); +#567=IFCCARTESIANPOINT((-0.192813113331795,0.00962049700319767,0.228011801838875)); +#568=IFCCARTESIANPOINT((-0.0995994955301285,0.0463632792234421,0.169919461011887)); +#569=IFCCARTESIANPOINT((-0.0153328543528914,0.07756557315588,0.138280719518661)); +#570=IFCCARTESIANPOINT((-0.0149811441078782,0.0544508099555969,0.170514196157455)); +#571=IFCCARTESIANPOINT((-0.0777326822280884,0.0189591310918331,0.297642737627029)); +#572=IFCCARTESIANPOINT((-0.0429378487169743,0.0526389256119728,0.171193689107895)); +#573=IFCCARTESIANPOINT((-0.210668057203293,-0.0934961810708046,0.245899826288223)); +#574=IFCCARTESIANPOINT((-0.162400558590889,0.0198477655649185,0.223333954811096)); +#575=IFCCARTESIANPOINT((0.112556174397469,-0.0415905937552452,0.087884321808815)); +#576=IFCCARTESIANPOINT((-0.0984991043806076,0.0341813936829567,0.19681504368782)); +#577=IFCCARTESIANPOINT((-0.125417664647102,0.00907643139362335,0.292186677455902)); +#578=IFCCARTESIANPOINT((0.0127286352217197,0.0715995132923126,0.138794869184494)); +#579=IFCCARTESIANPOINT((-0.184464573860168,-0.063567191362381,0.0917578190565109)); +#580=IFCCARTESIANPOINT((-0.159845903515816,0.0349735803902149,0.277037382125854)); +#581=IFCCARTESIANPOINT((-0.163954228162766,-0.073273241519928,0.079649306833744)); +#582=IFCCARTESIANPOINT((-0.130220845341682,0.0479081235826015,0.111017473042011)); +#583=IFCCARTESIANPOINT((-0.105627626180649,-0.103251308202744,0.104907594621181)); +#584=IFCCARTESIANPOINT((-0.0447412990033627,-0.130966305732727,0.105820834636688)); +#585=IFCCARTESIANPOINT((-0.0145897325128317,-0.137667417526245,0.107010833919048)); +#586=IFCCARTESIANPOINT((0.0177259147167206,-0.133680522441864,0.11051332205534)); +#587=IFCCARTESIANPOINT((-0.20410780608654,-0.015498636290431,0.265768945217133)); +#588=IFCCARTESIANPOINT((-0.163662612438202,-0.0963144749403,0.108248025178909)); +#589=IFCCARTESIANPOINT((-0.133774682879448,-0.102946348488331,0.108776144683361)); +#590=IFCCARTESIANPOINT((-0.152653515338898,-0.093793697655201,0.0112244309857488)); +#591=IFCCARTESIANPOINT((-0.169374197721481,0.0769077241420746,0.31595915555954)); +#592=IFCCARTESIANPOINT((-0.15337011218071,0.0495448186993599,0.289855599403381)); +#593=IFCCARTESIANPOINT((-0.14865180850029,0.0935175195336342,0.306516766548157)); +#594=IFCCARTESIANPOINT((-0.163774311542511,-0.100279614329338,0.138708546757698)); +#595=IFCCARTESIANPOINT((-0.114786863327026,-0.0349755696952343,0.251059830188751)); +#596=IFCCARTESIANPOINT((0.0435214228928089,-0.123003117740154,0.107089169323444)); +#597=IFCCARTESIANPOINT((0.0122568001970649,0.0234032459557056,0.212896287441254)); +#598=IFCCARTESIANPOINT((-0.132915586233139,-0.105148307979107,0.138666361570358)); +#599=IFCCARTESIANPOINT((-0.103796437382698,-0.10418801009655,0.13867013156414)); +#600=IFCCARTESIANPOINT((-0.0721595510840416,-0.1059859842062,0.138681977987289)); +#601=IFCCARTESIANPOINT((0.0412953048944473,-0.0123581402003765,0.221496060490608)); +#602=IFCCARTESIANPOINT((-0.0697300583124161,0.0507166534662247,0.170578330755234)); +#603=IFCCARTESIANPOINT((0.0441036224365234,-0.114852353930473,0.138935402035713)); +#604=IFCCARTESIANPOINT((-0.0128488391637802,0.0388977639377117,0.196252673864365)); +#605=IFCCARTESIANPOINT((-0.124916173517704,-0.00659546442329884,0.306106418371201)); +#606=IFCCARTESIANPOINT((-0.218161851167679,-0.071009561419487,0.230814844369888)); +#607=IFCCARTESIANPOINT((-0.163197606801987,-0.0973011329770088,0.173606932163239)); +#608=IFCCARTESIANPOINT((-0.106259688735008,-0.0960564464330673,0.167294099926949)); +#609=IFCCARTESIANPOINT((-0.134439319372177,-0.0996981337666512,0.164969086647034)); +#610=IFCCARTESIANPOINT((-0.160570159554482,-0.110724151134491,0.202919006347656)); +#611=IFCCARTESIANPOINT((-0.120365753769875,-0.00549432123079896,0.253050655126572)); +#612=IFCCARTESIANPOINT((-0.133883744478226,0.0106024611741304,0.23326064646244)); +#613=IFCCARTESIANPOINT((-0.0365464128553867,0.062771737575531,0.351498425006866)); +#614=IFCCARTESIANPOINT((-0.0698662772774696,0.0357129909098148,0.305281817913055)); +#615=IFCCARTESIANPOINT((-0.135447904467583,-0.0874549821019173,0.184239640831947)); +#616=IFCCARTESIANPOINT((-0.112891294062138,0.00657996907830238,0.271908432245255)); +#617=IFCCARTESIANPOINT((-0.0499069318175316,0.0498133301734924,0.325594484806061)); +#618=IFCCARTESIANPOINT((-0.135738432407379,-0.100006818771362,-7.45058059692383E-09)); +#619=IFCCARTESIANPOINT((0.0123523958027363,-0.101531967520714,-7.45058059692383E-09)); +#620=IFCCARTESIANPOINT((-0.102930329740047,-0.0987276136875153,-7.45058059692383E-09)); +#621=IFCCARTESIANPOINT((-0.158383101224899,0.0353976972401142,0.167762398719788)); +#622=IFCCARTESIANPOINT((0.0585155189037323,-0.0887269079685211,0.0169257298111916)); +#623=IFCCARTESIANPOINT((-0.202236160635948,-0.0440891794860363,0.107780121266842)); +#624=IFCCARTESIANPOINT((0.12652799487114,-0.0424845181405544,0.0317913927137852)); +#625=IFCCARTESIANPOINT((0.0445115864276886,-0.111490845680237,0.0452388003468513)); +#626=IFCCARTESIANPOINT((0.0178857706487179,0.0359265469014645,0.199328750371933)); +#627=IFCCARTESIANPOINT((0.0685334727168083,-0.0978689268231392,0.0533365905284882)); +#628=IFCCARTESIANPOINT((0.138488471508026,-0.0432419404387474,0.0493728704750538)); +#629=IFCCARTESIANPOINT((0.0406565591692924,0.062880277633667,0.138536900281906)); +#630=IFCCARTESIANPOINT((0.0871811881661415,-0.0870387107133865,0.138694822788239)); +#631=IFCCARTESIANPOINT((-0.0505233928561211,0.0300182458013296,0.313426643610001)); +#632=IFCCARTESIANPOINT((0.0435324311256409,-0.119963906705379,0.0792121887207031)); +#633=IFCCARTESIANPOINT((0.0723142325878143,-0.100660108029842,0.0801471099257469)); +#634=IFCCARTESIANPOINT((0.0880676060914993,-0.086207315325737,0.078484445810318)); +#635=IFCCARTESIANPOINT((0.136276960372925,-0.0405644066631794,0.078633114695549)); +#636=IFCCARTESIANPOINT((0.0735301449894905,0.0462804175913334,0.10518267005682)); +#637=IFCCARTESIANPOINT((-0.180783584713936,0.120272636413574,0.33598318696022)); +#638=IFCCARTESIANPOINT((-0.155802026391029,-0.042164009064436,0.0622472763061523)); +#639=IFCCARTESIANPOINT((-0.192451253533363,-0.0732510983943939,0.112686090171337)); +#640=IFCCARTESIANPOINT((0.0313579067587852,0.0240139346569777,0.208784699440002)); +#641=IFCCARTESIANPOINT((0.0728883668780327,-0.103513494133949,0.107350297272205)); +#642=IFCCARTESIANPOINT((0.0885002017021179,-0.0885679498314857,0.105739302933216)); +#643=IFCCARTESIANPOINT((0.100790202617645,-0.0713259652256966,0.10683286935091)); +#644=IFCCARTESIANPOINT((0.109439946711063,-0.0426978133618832,0.107300646603107)); +#645=IFCCARTESIANPOINT((-0.18864569067955,-0.0167884975671768,0.0867345333099365)); +#646=IFCCARTESIANPOINT((-0.0709428116679192,0.0352016389369965,0.19365206360817)); +#647=IFCCARTESIANPOINT((-0.0357190407812595,0.0615072995424271,0.335724234580994)); +#648=IFCCARTESIANPOINT((0.0447911284863949,0.0144118629395962,-7.45058059692383E-09)); +#649=IFCCARTESIANPOINT((0.0369860865175724,0.0369828194379807,-7.45058059692383E-09)); +#650=IFCCARTESIANPOINT((0.0461129434406757,-0.0748821049928665,-7.45058059692383E-09)); +#651=IFCCARTESIANPOINT((0.104031659662724,-0.0135611081495881,0.0148804550990462)); +#652=IFCCARTESIANPOINT((0.0986066535115242,0.0066530667245388,0.0271508432924747)); +#653=IFCCARTESIANPOINT((0.103960558772087,-0.0420542061328888,0.0150693515315652)); +#654=IFCCARTESIANPOINT((0.121874935925007,-0.0147962821647525,0.0282622296363115)); +#655=IFCCARTESIANPOINT((0.0696230307221413,0.0340555869042873,0.168976783752441)); +#656=IFCCARTESIANPOINT((0.0729203075170517,0.015480482019484,0.0226278305053711)); +#657=IFCCARTESIANPOINT((-0.0445376336574554,0.0741409137845039,0.139188349246979)); +#658=IFCCARTESIANPOINT((0.046685803681612,0.0460076108574867,0.0192816369235516)); +#659=IFCCARTESIANPOINT((0.132462680339813,-0.0147683853283525,0.079218864440918)); +#660=IFCCARTESIANPOINT((0.123972199857235,0.00519884005188942,0.0471794344484806)); +#661=IFCCARTESIANPOINT((0.13483801484108,-0.0135693158954382,0.0477543026208878)); +#662=IFCCARTESIANPOINT((0.101557418704033,0.0150842368602753,0.0500984787940979)); +#663=IFCCARTESIANPOINT((-0.151446789503098,0.125798091292381,0.318272113800049)); +#664=IFCCARTESIANPOINT((0.0826703608036041,0.023927254602313,0.0464257299900055)); +#665=IFCCARTESIANPOINT((0.0693408101797104,0.0435765013098717,0.0500893704593182)); +#666=IFCCARTESIANPOINT((-0.0420871675014496,0.0380131863057613,0.193471923470497)); +#667=IFCCARTESIANPOINT((-0.0971032008528709,0.0616641864180565,-7.45058059692383E-09)); +#668=IFCCARTESIANPOINT((-0.0130963791161776,0.064698226749897,0.0197515171021223)); +#669=IFCCARTESIANPOINT((-0.157119512557983,0.00803167372941971,-7.45058059692383E-09)); +#670=IFCCARTESIANPOINT((0.113602519035339,-0.0132037419825792,0.0879008769989014)); +#671=IFCCARTESIANPOINT((-0.069912314414978,0.066078893840313,0.0191369466483593)); +#672=IFCCARTESIANPOINT((0.0389328189194202,0.0351467467844486,0.194373697042465)); +#673=IFCCARTESIANPOINT((0.0768988505005836,0.0420413166284561,0.0788332372903824)); +#674=IFCCARTESIANPOINT((0.10157422721386,0.0134498169645667,0.0773250162601471)); +#675=IFCCARTESIANPOINT((0.123080961406231,0.00395354814827442,0.0694246292114258)); +#676=IFCCARTESIANPOINT((-0.211960434913635,-0.102200835943222,0.224356546998024)); +#677=IFCCARTESIANPOINT((0.110181555151939,-0.0136255938559771,0.109196342527866)); +#678=IFCCARTESIANPOINT((-0.102282598614693,0.0414383597671986,0.019612405449152)); +#679=IFCCARTESIANPOINT((-0.172445297241211,0.11539913713932,0.340771019458771)); +#680=IFCCARTESIANPOINT((-0.181048646569252,0.112369157373905,0.34296378493309)); +#681=IFCCARTESIANPOINT((0.0725264996290207,-0.0152853392064571,0.200319215655327)); +#682=IFCCARTESIANPOINT((-0.183978870511055,0.0709394812583923,0.317676812410355)); +#683=IFCCARTESIANPOINT((-0.153028383851051,-0.0384657420217991,-7.45058059692383E-09)); +#684=IFCCARTESIANPOINT((-0.154637187719345,-0.0691222250461578,-7.45058059692383E-09)); +#685=IFCCARTESIANPOINT((-0.152765303850174,-0.0738510563969612,0.015262059867382)); +#686=IFCCARTESIANPOINT((-0.153248697519302,-0.0919284746050835,-7.45058059692383E-09)); +#687=IFCCARTESIANPOINT((-0.16192090511322,-0.0145302480086684,-7.45058059692383E-09)); +#688=IFCCARTESIANPOINT((-0.161076262593269,-0.0149271814152598,0.0173035766929388)); +#689=IFCCARTESIANPOINT((-0.139386385679245,-0.0480194091796875,0.0201432537287474)); +#690=IFCCARTESIANPOINT((-0.15407682955265,-0.0336258858442307,0.0154564278200269)); +#691=IFCCARTESIANPOINT((-0.141747921705246,-0.0158547051250935,0.0288874395191669)); +#692=IFCCARTESIANPOINT((-0.0563743449747562,-0.108996540307999,0.0737379342317581)); +#693=IFCCARTESIANPOINT((-0.0461691729724407,0.0890766233205795,0.110146202147007)); +#694=IFCCARTESIANPOINT((-0.0146415047347546,0.0512426868081093,-7.45058059692383E-09)); +#695=IFCCARTESIANPOINT((-0.156508177518845,0.00872325897216797,0.0127747664228082)); +#696=IFCCARTESIANPOINT((-0.0932494476437569,0.0622886717319489,0.0157215017825365)); +#697=IFCCARTESIANPOINT((-0.134241998195648,0.0180515833199024,0.0220324043184519)); +#698=IFCCARTESIANPOINT((-0.0754619538784027,0.0455531552433968,0.0509162880480289)); +#699=IFCCARTESIANPOINT((-0.103701874613762,0.0273517612367868,0.0517874732613564)); +#700=IFCCARTESIANPOINT((-0.131066977977753,0.0115249017253518,0.0524038933217525)); +#701=IFCCARTESIANPOINT((-0.062931016087532,0.0692232176661491,0.0536416172981262)); +#702=IFCCARTESIANPOINT((-0.132335588335991,0.0322872921824455,0.19751612842083)); +#703=IFCCARTESIANPOINT((-0.0452888980507851,0.0760203972458839,0.0472172982990742)); +#704=IFCCARTESIANPOINT((-0.163926124572754,0.0142420912161469,0.0823174566030502)); +#705=IFCCARTESIANPOINT((-0.174691706895828,-0.0135900285094976,0.0736509189009666)); +#706=IFCCARTESIANPOINT((-0.0486402213573456,0.0849898308515549,0.0788175389170647)); +#707=IFCCARTESIANPOINT((-0.0689510703086853,0.0702485665678978,0.0784279331564903)); +#708=IFCCARTESIANPOINT((-0.0810153111815453,0.0491584502160549,0.0748984813690186)); +#709=IFCCARTESIANPOINT((-0.0429749675095081,0.0617619827389717,-7.45058059692383E-09)); +#710=IFCCARTESIANPOINT((0.0349937379360199,0.00642204098403454,0.219141826033592)); +#711=IFCCARTESIANPOINT((-0.202323064208031,-0.0122631303966045,0.109208643436432)); +#712=IFCCARTESIANPOINT((-0.188646167516708,0.0148954978212714,0.108683586120605)); +#713=IFCCARTESIANPOINT((-0.0744052901864052,0.0735662579536438,0.106222227215767)); +#714=IFCCARTESIANPOINT((-0.161729156970978,0.0381991006433964,0.108166508376598)); +#715=IFCCARTESIANPOINT((-0.104008600115776,0.0453929454088211,-7.45058059692383E-09)); +#716=IFCCARTESIANPOINT((0.0388389863073826,0.0702219158411026,0.10972835123539)); +#717=IFCCARTESIANPOINT((-0.0412575826048851,0.0688836574554443,0.0204634200781584)); +#718=IFCCARTESIANPOINT((-0.132600158452988,0.0162683837115765,-7.45058059692383E-09)); +#719=IFCCARTESIANPOINT((0.0419384241104126,0.0643723532557487,0.0487342029809952)); +#720=IFCCARTESIANPOINT((-0.0230755694210529,0.0902970731258392,0.106796741485596)); +#721=IFCCARTESIANPOINT((0.0122685618698597,0.0503091886639595,-7.45058059692383E-09)); +#722=IFCCARTESIANPOINT((0.0420029424130917,0.0680971890687943,0.0789963230490685)); +#723=IFCCARTESIANPOINT((-0.0132175851613283,0.00625489093363285,0.222308561205864)); +#724=IFCCARTESIANPOINT((0.0146723045036197,0.00723757036030293,0.223271667957306)); +#725=IFCCARTESIANPOINT((0.0720149055123329,-0.0120490025728941,0.00231547281146049)); +#726=IFCCARTESIANPOINT((0.013688700273633,0.0642379224300385,0.0262222941964865)); +#727=IFCCARTESIANPOINT((0.033619936555624,0.0599825419485569,0.0301631242036819)); +#728=IFCCARTESIANPOINT((0.0156846102327108,0.0726122707128525,0.0497567467391491)); +#729=IFCCARTESIANPOINT((-0.0139973452314734,0.0766579210758209,0.0474896989762783)); +#730=IFCCARTESIANPOINT((-0.0166601836681366,0.0857705846428871,0.0790435597300529)); +#731=IFCCARTESIANPOINT((0.0127416122704744,0.0787845030426979,0.0776184424757957)); +#732=IFCCARTESIANPOINT((-0.137325063347816,0.0222998633980751,0.0709470063447952)); +#733=IFCCARTESIANPOINT((-0.103061355650425,0.0392319709062576,0.082869827747345)); +#734=IFCCARTESIANPOINT((-0.133015736937523,0.0387391112744808,0.0904415026307106)); +#735=IFCCARTESIANPOINT((-0.151931047439575,0.0321191623806953,0.0878717452287674)); +#736=IFCCARTESIANPOINT((0.0125869233161211,0.0806632563471794,0.105742789804935)); +#737=IFCCARTESIANPOINT((-0.0995742082595825,0.049370177090168,0.106232292950153)); +#738=IFCCARTESIANPOINT((-0.0746603757143021,0.0656085163354874,-7.45058059692383E-09)); +#739=IFCCARTESIANPOINT((0.0122953318059444,0.017735980451107,-7.45058059692383E-09)); +#740=IFCCARTESIANPOINT((-0.0146934473887086,0.0262711010873318,-7.45058059692383E-09)); +#741=IFCCARTESIANPOINT((-0.0429374538362026,0.0298651698976755,-7.45058059692383E-09)); +#742=IFCCARTESIANPOINT((-0.103215932846069,0.0137835666537285,-7.45058059692383E-09)); +#743=IFCCARTESIANPOINT((0.0444422401487827,-0.0129836350679398,-7.45058059692383E-09)); +#744=IFCCARTESIANPOINT((-0.0746518895030022,0.0316607765853405,-7.45058059692383E-09)); +#745=IFCCARTESIANPOINT((0.0123018361628056,-0.0127876792103052,-7.45058059692383E-09)); +#746=IFCCARTESIANPOINT((-0.0147215090692043,-0.0133242877200246,-7.45058059692383E-09)); +#747=IFCCARTESIANPOINT((-0.101430043578148,-0.0147481001913548,-7.45058059692383E-09)); +#748=IFCCARTESIANPOINT((-0.0429213680326939,-0.0151002155616879,-7.45058059692383E-09)); +#749=IFCCARTESIANPOINT((-0.132630944252014,-0.0134387537837029,-7.45058059692383E-09)); +#750=IFCCARTESIANPOINT((-0.0746475011110306,-0.0111579261720181,-7.45058059692383E-09)); +#751=IFCCARTESIANPOINT((0.0461949594318867,-0.0483818538486958,-7.45058059692383E-09)); +#752=IFCCARTESIANPOINT((0.0123028568923473,-0.0431565642356873,-7.45058059692383E-09)); +#753=IFCCARTESIANPOINT((0.0676943361759186,-0.0439984127879143,0.00213921279646456)); +#754=IFCCARTESIANPOINT((-0.0147214606404305,-0.0419304519891739,-7.45058059692383E-09)); +#755=IFCCARTESIANPOINT((-0.0429213680326939,-0.0426230616867542,-7.45058059692383E-09)); +#756=IFCCARTESIANPOINT((-0.134391859173775,-0.0420995727181435,-7.45058059692383E-09)); +#757=IFCCARTESIANPOINT((0.0123003236949444,-0.0714240521192551,-7.45058059692383E-09)); +#758=IFCCARTESIANPOINT((-0.0147217661142349,-0.0719940662384033,-7.45058059692383E-09)); +#759=IFCCARTESIANPOINT((-0.0746477097272873,-0.0698381289839745,-7.45058059692383E-09)); +#760=IFCCARTESIANPOINT((-0.0429213680326939,-0.0721928924322128,-7.45058059692383E-09)); +#761=IFCCARTESIANPOINT((-0.101144231855869,-0.0718697011470795,-7.45058059692383E-09)); +#762=IFCCARTESIANPOINT((0.0347950644791126,-0.096686989068985,-7.45058059692383E-09)); +#763=IFCCARTESIANPOINT((-0.132067084312439,-0.0720017328858376,-7.45058059692383E-09)); +#764=IFCCARTESIANPOINT((-0.159548789262772,-0.0125050684437156,0.0618688985705376)); +#765=IFCCARTESIANPOINT((-0.0169071108102798,-0.107485927641392,-7.45058059692383E-09)); +#766=IFCCARTESIANPOINT((-0.0746394321322441,-0.103576719760895,-7.45058059692383E-09)); +#767=IFCCARTESIANPOINT((-0.0428757518529892,-0.105996340513229,-7.45058059692383E-09)); +#768=IFCCARTESIANPOINT((-0.0746474862098694,-0.0418127365410328,-7.45058059692383E-09)); +#769=IFCCARTESIANPOINT((-0.101288944482803,-0.0456511229276657,-7.45058059692383E-09)); +#770=IFCCARTESIANPOINT((0.061871238052845,0.0245271548628807,0.191577181220055)); +#771=IFCCARTESIANPOINT((-0.0470216795802116,0.0414715930819511,0.344332307577133)); +#772=IFCCARTESIANPOINT((-0.0351001992821693,0.0582603961229324,0.352131396532059)); +#773=IFCCARTESIANPOINT((-0.043320570141077,0.0422725304961205,0.325726985931396)); +#774=IFCCARTESIANPOINT((-0.0332878455519676,0.056865319609642,0.334871053695679)); +#775=IFCCARTESIANPOINT((-0.0782285928726196,0.010980136692524,0.334277510643005)); +#776=IFCCARTESIANPOINT((-0.0612197890877724,0.0185103937983513,0.30783212184906)); +#777=IFCCARTESIANPOINT((-0.0876919776201248,0.0268637835979462,0.333815038204193)); +#778=IFCCARTESIANPOINT((-0.0750949084758759,-0.00158989988267422,0.21651217341423)); +#779=IFCCARTESIANPOINT((-0.0432584583759308,0.000724630663171411,0.217384174466133)); +#780=IFCPOLYLOOP((#591,#682,#448)); +#781=IFCFACEOUTERBOUND(#780,.T.); +#782=IFCFACE((#781)); +#783=IFCPOLYLOOP((#425,#456,#464)); +#784=IFCFACEOUTERBOUND(#783,.T.); +#785=IFCFACE((#784)); +#786=IFCPOLYLOOP((#495,#504,#435)); +#787=IFCFACEOUTERBOUND(#786,.T.); +#788=IFCFACE((#787)); +#789=IFCPOLYLOOP((#566,#423,#595)); +#790=IFCFACEOUTERBOUND(#789,.T.); +#791=IFCFACE((#790)); +#792=IFCPOLYLOOP((#692,#584,#563)); +#793=IFCFACEOUTERBOUND(#792,.T.); +#794=IFCFACE((#793)); +#795=IFCPOLYLOOP((#645,#623,#711)); +#796=IFCFACEOUTERBOUND(#795,.T.); +#797=IFCFACE((#796)); +#798=IFCPOLYLOOP((#458,#497,#577)); +#799=IFCFACEOUTERBOUND(#798,.T.); +#800=IFCFACE((#799)); +#801=IFCPOLYLOOP((#464,#449,#425)); +#802=IFCFACEOUTERBOUND(#801,.T.); +#803=IFCFACE((#802)); +#804=IFCPOLYLOOP((#462,#514,#459)); +#805=IFCFACEOUTERBOUND(#804,.T.); +#806=IFCFACE((#805)); +#807=IFCPOLYLOOP((#468,#422,#474)); +#808=IFCFACEOUTERBOUND(#807,.T.); +#809=IFCFACE((#808)); +#810=IFCPOLYLOOP((#406,#611,#566)); +#811=IFCFACEOUTERBOUND(#810,.T.); +#812=IFCFACE((#811)); +#813=IFCPOLYLOOP((#414,#580,#592)); +#814=IFCFACEOUTERBOUND(#813,.T.); +#815=IFCFACE((#814)); +#816=IFCPOLYLOOP((#509,#518,#517)); +#817=IFCFACEOUTERBOUND(#816,.T.); +#818=IFCFACE((#817)); +#819=IFCPOLYLOOP((#624,#510,#653)); +#820=IFCFACEOUTERBOUND(#819,.T.); +#821=IFCFACE((#820)); +#822=IFCPOLYLOOP((#656,#725,#648)); +#823=IFCFACEOUTERBOUND(#822,.T.); +#824=IFCFACE((#823)); +#825=IFCPOLYLOOP((#566,#461,#423)); +#826=IFCFACEOUTERBOUND(#825,.T.); +#827=IFCFACE((#826)); +#828=IFCPOLYLOOP((#628,#551,#624)); +#829=IFCFACEOUTERBOUND(#828,.T.); +#830=IFCFACE((#829)); +#831=IFCPOLYLOOP((#494,#777,#528)); +#832=IFCFACEOUTERBOUND(#831,.T.); +#833=IFCFACE((#832)); +#834=IFCPOLYLOOP((#474,#603,#468)); +#835=IFCFACEOUTERBOUND(#834,.T.); +#836=IFCFACE((#835)); +#837=IFCPOLYLOOP((#660,#652,#662)); +#838=IFCFACEOUTERBOUND(#837,.T.); +#839=IFCFACE((#838)); +#840=IFCPOLYLOOP((#519,#616,#611)); +#841=IFCFACEOUTERBOUND(#840,.T.); +#842=IFCFACE((#841)); +#843=IFCPOLYLOOP((#507,#440,#411)); +#844=IFCFACEOUTERBOUND(#843,.T.); +#845=IFCFACE((#844)); +#846=IFCPOLYLOOP((#475,#710,#724)); +#847=IFCFACEOUTERBOUND(#846,.T.); +#848=IFCFACE((#847)); +#849=IFCPOLYLOOP((#701,#671,#698)); +#850=IFCFACEOUTERBOUND(#849,.T.); +#851=IFCFACE((#850)); +#852=IFCPOLYLOOP((#461,#454,#423)); +#853=IFCFACEOUTERBOUND(#852,.T.); +#854=IFCFACE((#853)); +#855=IFCPOLYLOOP((#521,#448,#592)); +#856=IFCFACEOUTERBOUND(#855,.T.); +#857=IFCFACE((#856)); +#858=IFCPOLYLOOP((#466,#460,#557)); +#859=IFCFACEOUTERBOUND(#858,.T.); +#860=IFCFACE((#859)); +#861=IFCPOLYLOOP((#510,#551,#524)); +#862=IFCFACEOUTERBOUND(#861,.T.); +#863=IFCFACE((#862)); +#864=IFCPOLYLOOP((#658,#648,#649)); +#865=IFCFACEOUTERBOUND(#864,.T.); +#866=IFCFACE((#865)); +#867=IFCPOLYLOOP((#612,#611,#406)); +#868=IFCFACEOUTERBOUND(#867,.T.); +#869=IFCFACE((#868)); +#870=IFCPOLYLOOP((#660,#661,#654)); +#871=IFCFACEOUTERBOUND(#870,.T.); +#872=IFCFACE((#871)); +#873=IFCPOLYLOOP((#607,#609,#615)); +#874=IFCFACEOUTERBOUND(#873,.T.); +#875=IFCFACE((#874)); +#876=IFCPOLYLOOP((#460,#682,#561)); +#877=IFCFACEOUTERBOUND(#876,.T.); +#878=IFCFACE((#877)); +#879=IFCPOLYLOOP((#507,#411,#413)); +#880=IFCFACEOUTERBOUND(#879,.T.); +#881=IFCFACE((#880)); +#882=IFCPOLYLOOP((#467,#544,#580)); +#883=IFCFACEOUTERBOUND(#882,.T.); +#884=IFCFACE((#883)); +#885=IFCPOLYLOOP((#419,#513,#522)); +#886=IFCFACEOUTERBOUND(#885,.T.); +#887=IFCFACE((#886)); +#888=IFCPOLYLOOP((#463,#563,#584)); +#889=IFCFACEOUTERBOUND(#888,.T.); +#890=IFCFACE((#889)); +#891=IFCPOLYLOOP((#562,#558,#612)); +#892=IFCFACEOUTERBOUND(#891,.T.); +#893=IFCFACE((#892)); +#894=IFCPOLYLOOP((#704,#645,#712)); +#895=IFCFACEOUTERBOUND(#894,.T.); +#896=IFCFACE((#895)); +#897=IFCPOLYLOOP((#427,#436,#446)); +#898=IFCFACEOUTERBOUND(#897,.T.); +#899=IFCFACE((#898)); +#900=IFCPOLYLOOP((#448,#682,#460)); +#901=IFCFACEOUTERBOUND(#900,.T.); +#902=IFCFACE((#901)); +#903=IFCPOLYLOOP((#593,#663,#471)); +#904=IFCFACEOUTERBOUND(#903,.T.); +#905=IFCFACE((#904)); +#906=IFCPOLYLOOP((#713,#708,#737)); +#907=IFCFACEOUTERBOUND(#906,.T.); +#908=IFCFACE((#907)); +#909=IFCPOLYLOOP((#540,#493,#663)); +#910=IFCFACEOUTERBOUND(#909,.T.); +#911=IFCFACE((#910)); +#912=IFCPOLYLOOP((#435,#595,#423)); +#913=IFCFACEOUTERBOUND(#912,.T.); +#914=IFCFACE((#913)); +#915=IFCPOLYLOOP((#699,#708,#698)); +#916=IFCFACEOUTERBOUND(#915,.T.); +#917=IFCFACE((#916)); +#918=IFCPOLYLOOP((#454,#442,#423)); +#919=IFCFACEOUTERBOUND(#918,.T.); +#920=IFCFACE((#919)); +#921=IFCPOLYLOOP((#448,#466,#414)); +#922=IFCFACEOUTERBOUND(#921,.T.); +#923=IFCFACE((#922)); +#924=IFCPOLYLOOP((#773,#429,#631)); +#925=IFCFACEOUTERBOUND(#924,.T.); +#926=IFCFACE((#925)); +#927=IFCPOLYLOOP((#540,#451,#637)); +#928=IFCFACEOUTERBOUND(#927,.T.); +#929=IFCFACE((#928)); +#930=IFCPOLYLOOP((#437,#458,#605)); +#931=IFCFACEOUTERBOUND(#930,.T.); +#932=IFCFACE((#931)); +#933=IFCPOLYLOOP((#737,#708,#733)); +#934=IFCFACEOUTERBOUND(#933,.T.); +#935=IFCFACE((#934)); +#936=IFCPOLYLOOP((#685,#514,#689)); +#937=IFCFACEOUTERBOUND(#936,.T.); +#938=IFCFACE((#937)); +#939=IFCPOLYLOOP((#679,#484,#680)); +#940=IFCFACEOUTERBOUND(#939,.T.); +#941=IFCFACE((#940)); +#942=IFCPOLYLOOP((#523,#510,#524)); +#943=IFCFACEOUTERBOUND(#942,.T.); +#944=IFCFACE((#943)); +#945=IFCPOLYLOOP((#680,#484,#637)); +#946=IFCFACEOUTERBOUND(#945,.T.); +#947=IFCFACE((#946)); +#948=IFCPOLYLOOP((#636,#722,#716)); +#949=IFCFACEOUTERBOUND(#948,.T.); +#950=IFCFACE((#949)); +#951=IFCPOLYLOOP((#612,#467,#519)); +#952=IFCFACEOUTERBOUND(#951,.T.); +#953=IFCFACE((#952)); +#954=IFCPOLYLOOP((#554,#692,#563)); +#955=IFCFACEOUTERBOUND(#954,.T.); +#956=IFCFACE((#955)); +#957=IFCPOLYLOOP((#690,#691,#688)); +#958=IFCFACEOUTERBOUND(#957,.T.); +#959=IFCFACE((#958)); +#960=IFCPOLYLOOP((#690,#689,#691)); +#961=IFCFACEOUTERBOUND(#960,.T.); +#962=IFCFACE((#961)); +#963=IFCPOLYLOOP((#689,#690,#683)); +#964=IFCFACEOUTERBOUND(#963,.T.); +#965=IFCFACE((#964)); +#966=IFCPOLYLOOP((#643,#575,#644)); +#967=IFCFACEOUTERBOUND(#966,.T.); +#968=IFCFACE((#967)); +#969=IFCPOLYLOOP((#637,#451,#680)); +#970=IFCFACEOUTERBOUND(#969,.T.); +#971=IFCFACE((#970)); +#972=IFCPOLYLOOP((#528,#617,#494)); +#973=IFCFACEOUTERBOUND(#972,.T.); +#974=IFCFACE((#973)); +#975=IFCPOLYLOOP((#561,#682,#451)); +#976=IFCFACEOUTERBOUND(#975,.T.); +#977=IFCFACE((#976)); +#978=IFCPOLYLOOP((#591,#451,#561)); +#979=IFCFACEOUTERBOUND(#978,.T.); +#980=IFCFACE((#979)); +#981=IFCPOLYLOOP((#672,#479,#626)); +#982=IFCFACEOUTERBOUND(#981,.T.); +#983=IFCFACE((#982)); +#984=IFCPOLYLOOP((#505,#673,#636)); +#985=IFCFACEOUTERBOUND(#984,.T.); +#986=IFCFACE((#985)); +#987=IFCPOLYLOOP((#681,#411,#417)); +#988=IFCFACEOUTERBOUND(#987,.T.); +#989=IFCFACE((#988)); +#990=IFCPOLYLOOP((#544,#467,#478)); +#991=IFCFACEOUTERBOUND(#990,.T.); +#992=IFCFACE((#991)); +#993=IFCPOLYLOOP((#544,#478,#460)); +#994=IFCFACEOUTERBOUND(#993,.T.); +#995=IFCFACE((#994)); +#996=IFCPOLYLOOP((#478,#557,#460)); +#997=IFCFACEOUTERBOUND(#996,.T.); +#998=IFCFACE((#997)); +#999=IFCPOLYLOOP((#461,#605,#454)); +#1000=IFCFACEOUTERBOUND(#999,.T.); +#1001=IFCFACE((#1000)); +#1002=IFCPOLYLOOP((#724,#640,#597)); +#1003=IFCFACEOUTERBOUND(#1002,.T.); +#1004=IFCFACE((#1003)); +#1005=IFCPOLYLOOP((#626,#640,#672)); +#1006=IFCFACEOUTERBOUND(#1005,.T.); +#1007=IFCFACE((#1006)); +#1008=IFCPOLYLOOP((#577,#454,#605)); +#1009=IFCFACEOUTERBOUND(#1008,.T.); +#1010=IFCFACE((#1009)); +#1011=IFCPOLYLOOP((#703,#671,#701)); +#1012=IFCFACEOUTERBOUND(#1011,.T.); +#1013=IFCFACE((#1012)); +#1014=IFCPOLYLOOP((#566,#616,#461)); +#1015=IFCFACEOUTERBOUND(#1014,.T.); +#1016=IFCFACE((#1015)); +#1017=IFCPOLYLOOP((#612,#519,#611)); +#1018=IFCFACEOUTERBOUND(#1017,.T.); +#1019=IFCFACE((#1018)); +#1020=IFCPOLYLOOP((#671,#696,#678)); +#1021=IFCFACEOUTERBOUND(#1020,.T.); +#1022=IFCFACE((#1021)); +#1023=IFCPOLYLOOP((#502,#601,#681)); +#1024=IFCFACEOUTERBOUND(#1023,.T.); +#1025=IFCFACE((#1024)); +#1026=IFCPOLYLOOP((#699,#732,#733)); +#1027=IFCFACEOUTERBOUND(#1026,.T.); +#1028=IFCFACE((#1027)); +#1029=IFCPOLYLOOP((#562,#612,#406)); +#1030=IFCFACEOUTERBOUND(#1029,.T.); +#1031=IFCFACE((#1030)); +#1032=IFCPOLYLOOP((#605,#461,#437)); +#1033=IFCFACEOUTERBOUND(#1032,.T.); +#1034=IFCFACE((#1033)); +#1035=IFCPOLYLOOP((#591,#451,#682)); +#1036=IFCFACEOUTERBOUND(#1035,.T.); +#1037=IFCFACE((#1036)); +#1038=IFCPOLYLOOP((#645,#711,#712)); +#1039=IFCFACEOUTERBOUND(#1038,.T.); +#1040=IFCFACE((#1039)); +#1041=IFCPOLYLOOP((#739,#721,#649)); +#1042=IFCFACEOUTERBOUND(#1041,.T.); +#1043=IFCFACE((#1042)); +#1044=IFCPOLYLOOP((#732,#734,#733)); +#1045=IFCFACEOUTERBOUND(#1044,.T.); +#1046=IFCFACE((#1045)); +#1047=IFCPOLYLOOP((#488,#532,#525)); +#1048=IFCFACEOUTERBOUND(#1047,.T.); +#1049=IFCFACE((#1048)); +#1050=IFCPOLYLOOP((#735,#734,#732)); +#1051=IFCFACEOUTERBOUND(#1050,.T.); +#1052=IFCFACE((#1051)); +#1053=IFCPOLYLOOP((#704,#735,#732)); +#1054=IFCFACEOUTERBOUND(#1053,.T.); +#1055=IFCFACE((#1054)); +#1056=IFCPOLYLOOP((#533,#423,#442)); +#1057=IFCFACEOUTERBOUND(#1056,.T.); +#1058=IFCFACE((#1057)); +#1059=IFCPOLYLOOP((#558,#702,#470)); +#1060=IFCFACEOUTERBOUND(#1059,.T.); +#1061=IFCFACE((#1060)); +#1062=IFCPOLYLOOP((#721,#726,#727)); +#1063=IFCFACEOUTERBOUND(#1062,.T.); +#1064=IFCFACE((#1063)); +#1065=IFCPOLYLOOP((#706,#701,#707)); +#1066=IFCFACEOUTERBOUND(#1065,.T.); +#1067=IFCFACE((#1066)); +#1068=IFCPOLYLOOP((#616,#497,#571)); +#1069=IFCFACEOUTERBOUND(#1068,.T.); +#1070=IFCFACE((#1069)); +#1071=IFCPOLYLOOP((#498,#589,#588)); +#1072=IFCFACEOUTERBOUND(#1071,.T.); +#1073=IFCFACE((#1072)); +#1074=IFCPOLYLOOP((#615,#525,#504)); +#1075=IFCFACEOUTERBOUND(#1074,.T.); +#1076=IFCFACE((#1075)); +#1077=IFCPOLYLOOP((#616,#577,#497)); +#1078=IFCFACEOUTERBOUND(#1077,.T.); +#1079=IFCFACE((#1078)); +#1080=IFCPOLYLOOP((#721,#658,#649)); +#1081=IFCFACEOUTERBOUND(#1080,.T.); +#1082=IFCFACE((#1081)); +#1083=IFCPOLYLOOP((#455,#419,#445)); +#1084=IFCFACEOUTERBOUND(#1083,.T.); +#1085=IFCFACE((#1084)); +#1086=IFCPOLYLOOP((#725,#743,#648)); +#1087=IFCFACEOUTERBOUND(#1086,.T.); +#1088=IFCFACE((#1087)); +#1089=IFCPOLYLOOP((#648,#739,#649)); +#1090=IFCFACEOUTERBOUND(#1089,.T.); +#1091=IFCFACE((#1090)); +#1092=IFCPOLYLOOP((#615,#608,#525)); +#1093=IFCFACEOUTERBOUND(#1092,.T.); +#1094=IFCFACE((#1093)); +#1095=IFCPOLYLOOP((#650,#476,#762)); +#1096=IFCFACEOUTERBOUND(#1095,.T.); +#1097=IFCFACE((#1096)); +#1098=IFCPOLYLOOP((#704,#764,#705)); +#1099=IFCFACEOUTERBOUND(#1098,.T.); +#1100=IFCFACE((#1099)); +#1101=IFCPOLYLOOP((#638,#581,#443)); +#1102=IFCFACEOUTERBOUND(#1101,.T.); +#1103=IFCFACE((#1102)); +#1104=IFCPOLYLOOP((#529,#556,#581)); +#1105=IFCFACEOUTERBOUND(#1104,.T.); +#1106=IFCFACE((#1105)); +#1107=IFCPOLYLOOP((#742,#718,#715)); +#1108=IFCFACEOUTERBOUND(#1107,.T.); +#1109=IFCFACE((#1108)); +#1110=IFCPOLYLOOP((#553,#498,#556)); +#1111=IFCFACEOUTERBOUND(#1110,.T.); +#1112=IFCFACE((#1111)); +#1113=IFCPOLYLOOP((#443,#579,#541)); +#1114=IFCFACEOUTERBOUND(#1113,.T.); +#1115=IFCFACE((#1114)); +#1116=IFCPOLYLOOP((#738,#696,#671)); +#1117=IFCFACEOUTERBOUND(#1116,.T.); +#1118=IFCFACE((#1117)); +#1119=IFCPOLYLOOP((#747,#742,#744,#750)); +#1120=IFCFACEOUTERBOUND(#1119,.T.); +#1121=IFCFACE((#1120)); +#1122=IFCPOLYLOOP((#687,#690,#688)); +#1123=IFCFACEOUTERBOUND(#1122,.T.); +#1124=IFCFACE((#1123)); +#1125=IFCPOLYLOOP((#533,#420,#457)); +#1126=IFCFACEOUTERBOUND(#1125,.T.); +#1127=IFCFACE((#1126)); +#1128=IFCPOLYLOOP((#506,#653,#510)); +#1129=IFCFACEOUTERBOUND(#1128,.T.); +#1130=IFCFACE((#1129)); +#1131=IFCPOLYLOOP((#601,#416,#427)); +#1132=IFCFACEOUTERBOUND(#1131,.T.); +#1133=IFCFACE((#1132)); +#1134=IFCPOLYLOOP((#734,#714,#582)); +#1135=IFCFACEOUTERBOUND(#1134,.T.); +#1136=IFCFACE((#1135)); +#1137=IFCPOLYLOOP((#711,#465,#426,#712)); +#1138=IFCFACEOUTERBOUND(#1137,.T.); +#1139=IFCFACE((#1138)); +#1140=IFCPOLYLOOP((#704,#714,#735)); +#1141=IFCFACEOUTERBOUND(#1140,.T.); +#1142=IFCFACE((#1141)); +#1143=IFCPOLYLOOP((#609,#594,#598)); +#1144=IFCFACEOUTERBOUND(#1143,.T.); +#1145=IFCFACE((#1144)); +#1146=IFCPOLYLOOP((#537,#406,#435)); +#1147=IFCFACEOUTERBOUND(#1146,.T.); +#1148=IFCFACE((#1147)); +#1149=IFCPOLYLOOP((#489,#496,#424)); +#1150=IFCFACEOUTERBOUND(#1149,.T.); +#1151=IFCFACE((#1150)); +#1152=IFCPOLYLOOP((#764,#443,#705)); +#1153=IFCFACEOUTERBOUND(#1152,.T.); +#1154=IFCFACE((#1153)); +#1155=IFCPOLYLOOP((#526,#451,#540)); +#1156=IFCFACEOUTERBOUND(#1155,.T.); +#1157=IFCFACE((#1156)); +#1158=IFCPOLYLOOP((#685,#686,#590)); +#1159=IFCFACEOUTERBOUND(#1158,.T.); +#1160=IFCFACE((#1159)); +#1161=IFCPOLYLOOP((#406,#595,#435)); +#1162=IFCFACEOUTERBOUND(#1161,.T.); +#1163=IFCFACE((#1162)); +#1164=IFCPOLYLOOP((#654,#653,#651)); +#1165=IFCFACEOUTERBOUND(#1164,.T.); +#1166=IFCFACE((#1165)); +#1167=IFCPOLYLOOP((#462,#618,#620)); +#1168=IFCFACEOUTERBOUND(#1167,.T.); +#1169=IFCFACE((#1168)); +#1170=IFCPOLYLOOP((#638,#542,#547)); +#1171=IFCFACEOUTERBOUND(#1170,.T.); +#1172=IFCFACE((#1171)); +#1173=IFCPOLYLOOP((#545,#702,#558)); +#1174=IFCFACEOUTERBOUND(#1173,.T.); +#1175=IFCFACE((#1174)); +#1176=IFCPOLYLOOP((#431,#449,#480)); +#1177=IFCFACEOUTERBOUND(#1176,.T.); +#1178=IFCFACE((#1177)); +#1179=IFCPOLYLOOP((#550,#585,#549)); +#1180=IFCFACEOUTERBOUND(#1179,.T.); +#1181=IFCFACE((#1180)); +#1182=IFCPOLYLOOP((#548,#585,#584)); +#1183=IFCFACEOUTERBOUND(#1182,.T.); +#1184=IFCFACE((#1183)); +#1185=IFCPOLYLOOP((#599,#589,#583)); +#1186=IFCFACEOUTERBOUND(#1185,.T.); +#1187=IFCFACE((#1186)); +#1188=IFCPOLYLOOP((#632,#627,#633)); +#1189=IFCFACEOUTERBOUND(#1188,.T.); +#1190=IFCFACE((#1189)); +#1191=IFCPOLYLOOP((#453,#762,#476)); +#1192=IFCFACEOUTERBOUND(#1191,.T.); +#1193=IFCFACE((#1192)); +#1194=IFCPOLYLOOP((#478,#438,#587)); +#1195=IFCFACEOUTERBOUND(#1194,.T.); +#1196=IFCFACE((#1195)); +#1197=IFCPOLYLOOP((#625,#622,#627)); +#1198=IFCFACEOUTERBOUND(#1197,.T.); +#1199=IFCFACE((#1198)); +#1200=IFCPOLYLOOP((#550,#511,#512)); +#1201=IFCFACEOUTERBOUND(#1200,.T.); +#1202=IFCFACE((#1201)); +#1203=IFCPOLYLOOP((#598,#608,#609)); +#1204=IFCFACEOUTERBOUND(#1203,.T.); +#1205=IFCFACE((#1204)); +#1206=IFCPOLYLOOP((#756,#763,#684,#683)); +#1207=IFCFACEOUTERBOUND(#1206,.T.); +#1208=IFCFACE((#1207)); +#1209=IFCPOLYLOOP((#450,#468,#603)); +#1210=IFCFACEOUTERBOUND(#1209,.T.); +#1211=IFCFACE((#1210)); +#1212=IFCPOLYLOOP((#770,#490,#655)); +#1213=IFCFACEOUTERBOUND(#1212,.T.); +#1214=IFCFACE((#1213)); +#1215=IFCPOLYLOOP((#452,#518,#509)); +#1216=IFCFACEOUTERBOUND(#1215,.T.); +#1217=IFCFACE((#1216)); +#1218=IFCPOLYLOOP((#602,#499,#568)); +#1219=IFCFACEOUTERBOUND(#1218,.T.); +#1220=IFCFACE((#1219)); +#1221=IFCPOLYLOOP((#776,#469,#571)); +#1222=IFCFACEOUTERBOUND(#1221,.T.); +#1223=IFCFACE((#1222)); +#1224=IFCPOLYLOOP((#478,#536,#557)); +#1225=IFCFACEOUTERBOUND(#1224,.T.); +#1226=IFCFACE((#1225)); +#1227=IFCPOLYLOOP((#425,#416,#408)); +#1228=IFCFACEOUTERBOUND(#1227,.T.); +#1229=IFCFACE((#1228)); +#1230=IFCPOLYLOOP((#692,#515,#517)); +#1231=IFCFACEOUTERBOUND(#1230,.T.); +#1232=IFCFACE((#1231)); +#1233=IFCPOLYLOOP((#479,#629,#578)); +#1234=IFCFACEOUTERBOUND(#1233,.T.); +#1235=IFCFACE((#1234)); +#1236=IFCPOLYLOOP((#570,#666,#604)); +#1237=IFCFACEOUTERBOUND(#1236,.T.); +#1238=IFCFACE((#1237)); +#1239=IFCPOLYLOOP((#627,#634,#633)); +#1240=IFCFACEOUTERBOUND(#1239,.T.); +#1241=IFCFACE((#1240)); +#1242=IFCPOLYLOOP((#430,#496,#407)); +#1243=IFCFACEOUTERBOUND(#1242,.T.); +#1244=IFCFACE((#1243)); +#1245=IFCPOLYLOOP((#623,#492,#486)); +#1246=IFCFACEOUTERBOUND(#1245,.T.); +#1247=IFCFACE((#1246)); +#1248=IFCPOLYLOOP((#759,#761,#769,#768)); +#1249=IFCFACEOUTERBOUND(#1248,.T.); +#1250=IFCFACE((#1249)); +#1251=IFCPOLYLOOP((#726,#729,#728)); +#1252=IFCFACEOUTERBOUND(#1251,.T.); +#1253=IFCFACE((#1252)); +#1254=IFCPOLYLOOP((#661,#624,#654)); +#1255=IFCFACEOUTERBOUND(#1254,.T.); +#1256=IFCFACE((#1255)); +#1257=IFCPOLYLOOP((#693,#508,#657)); +#1258=IFCFACEOUTERBOUND(#1257,.T.); +#1259=IFCFACE((#1258)); +#1260=IFCPOLYLOOP((#632,#512,#625)); +#1261=IFCFACEOUTERBOUND(#1260,.T.); +#1262=IFCFACE((#1261)); +#1263=IFCPOLYLOOP((#523,#622,#506)); +#1264=IFCFACEOUTERBOUND(#1263,.T.); +#1265=IFCFACE((#1264)); +#1266=IFCPOLYLOOP((#771,#528,#429)); +#1267=IFCFACEOUTERBOUND(#1266,.T.); +#1268=IFCFACE((#1267)); +#1269=IFCPOLYLOOP((#731,#729,#730)); +#1270=IFCFACEOUTERBOUND(#1269,.T.); +#1271=IFCFACE((#1270)); +#1272=IFCPOLYLOOP((#444,#519,#467)); +#1273=IFCFACEOUTERBOUND(#1272,.T.); +#1274=IFCFACE((#1273)); +#1275=IFCPOLYLOOP((#725,#652,#651)); +#1276=IFCFACEOUTERBOUND(#1275,.T.); +#1277=IFCFACE((#1276)); +#1278=IFCPOLYLOOP((#562,#487,#545)); +#1279=IFCFACEOUTERBOUND(#1278,.T.); +#1280=IFCFACE((#1279)); +#1281=IFCPOLYLOOP((#417,#502,#681)); +#1282=IFCFACEOUTERBOUND(#1281,.T.); +#1283=IFCFACE((#1282)); +#1284=IFCPOLYLOOP((#756,#749,#747,#769)); +#1285=IFCFACEOUTERBOUND(#1284,.T.); +#1286=IFCFACE((#1285)); +#1287=IFCPOLYLOOP((#409,#778,#405)); +#1288=IFCFACEOUTERBOUND(#1287,.T.); +#1289=IFCFACE((#1288)); +#1290=IFCPOLYLOOP((#743,#751,#752,#745)); +#1291=IFCFACEOUTERBOUND(#1290,.T.); +#1292=IFCFACE((#1291)); +#1293=IFCPOLYLOOP((#539,#491,#426)); +#1294=IFCFACEOUTERBOUND(#1293,.T.); +#1295=IFCFACE((#1294)); +#1296=IFCPOLYLOOP((#560,#628,#635)); +#1297=IFCFACEOUTERBOUND(#1296,.T.); +#1298=IFCFACE((#1297)); +#1299=IFCPOLYLOOP((#567,#467,#574)); +#1300=IFCFACEOUTERBOUND(#1299,.T.); +#1301=IFCFACE((#1300)); +#1302=IFCPOLYLOOP((#460,#546,#544)); +#1303=IFCFACEOUTERBOUND(#1302,.T.); +#1304=IFCFACE((#1303)); +#1305=IFCPOLYLOOP((#766,#759,#760,#767)); +#1306=IFCFACEOUTERBOUND(#1305,.T.); +#1307=IFCFACE((#1306)); +#1308=IFCPOLYLOOP((#492,#607,#419)); +#1309=IFCFACEOUTERBOUND(#1308,.T.); +#1310=IFCFACE((#1309)); +#1311=IFCPOLYLOOP((#428,#567,#477)); +#1312=IFCFACEOUTERBOUND(#1311,.T.); +#1313=IFCFACE((#1312)); +#1314=IFCPOLYLOOP((#418,#482,#472)); +#1315=IFCFACEOUTERBOUND(#1314,.T.); +#1316=IFCFACE((#1315)); +#1317=IFCPOLYLOOP((#652,#664,#662)); +#1318=IFCFACEOUTERBOUND(#1317,.T.); +#1319=IFCFACE((#1318)); +#1320=IFCPOLYLOOP((#482,#430,#421)); +#1321=IFCFACEOUTERBOUND(#1320,.T.); +#1322=IFCFACE((#1321)); +#1323=IFCPOLYLOOP((#420,#421,#457)); +#1324=IFCFACEOUTERBOUND(#1323,.T.); +#1325=IFCFACE((#1324)); +#1326=IFCPOLYLOOP((#565,#568,#499)); +#1327=IFCFACEOUTERBOUND(#1326,.T.); +#1328=IFCFACE((#1327)); +#1329=IFCPOLYLOOP((#695,#691,#697)); +#1330=IFCFACEOUTERBOUND(#1329,.T.); +#1331=IFCFACE((#1330)); +#1332=IFCPOLYLOOP((#531,#422,#436)); +#1333=IFCFACEOUTERBOUND(#1332,.T.); +#1334=IFCFACE((#1333)); +#1335=IFCPOLYLOOP((#586,#603,#552)); +#1336=IFCFACEOUTERBOUND(#1335,.T.); +#1337=IFCFACE((#1336)); +#1338=IFCPOLYLOOP((#723,#475,#724)); +#1339=IFCFACEOUTERBOUND(#1338,.T.); +#1340=IFCFACE((#1339)); +#1341=IFCPOLYLOOP((#629,#636,#716)); +#1342=IFCFACEOUTERBOUND(#1341,.T.); +#1343=IFCFACE((#1342)); +#1344=IFCPOLYLOOP((#706,#713,#693)); +#1345=IFCFACEOUTERBOUND(#1344,.T.); +#1346=IFCFACE((#1345)); +#1347=IFCPOLYLOOP((#417,#440,#415)); +#1348=IFCFACEOUTERBOUND(#1347,.T.); +#1349=IFCFACE((#1348)); +#1350=IFCPOLYLOOP((#712,#491,#714)); +#1351=IFCFACEOUTERBOUND(#1350,.T.); +#1352=IFCFACE((#1351)); +#1353=IFCPOLYLOOP((#757,#752,#751,#650)); +#1354=IFCFACEOUTERBOUND(#1353,.T.); +#1355=IFCFACE((#1354)); +#1356=IFCPOLYLOOP((#666,#483,#604)); +#1357=IFCFACEOUTERBOUND(#1356,.T.); +#1358=IFCFACE((#1357)); +#1359=IFCPOLYLOOP((#535,#477,#539)); +#1360=IFCFACEOUTERBOUND(#1359,.T.); +#1361=IFCFACE((#1360)); +#1362=IFCPOLYLOOP((#774,#617,#647)); +#1363=IFCFACEOUTERBOUND(#1362,.T.); +#1364=IFCFACE((#1363)); +#1365=IFCPOLYLOOP((#496,#504,#495)); +#1366=IFCFACEOUTERBOUND(#1365,.T.); +#1367=IFCFACE((#1366)); +#1368=IFCPOLYLOOP((#493,#637,#484)); +#1369=IFCFACEOUTERBOUND(#1368,.T.); +#1370=IFCFACE((#1369)); +#1371=IFCPOLYLOOP((#736,#569,#578)); +#1372=IFCFACEOUTERBOUND(#1371,.T.); +#1373=IFCFACE((#1372)); +#1374=IFCPOLYLOOP((#405,#778,#406)); +#1375=IFCFACEOUTERBOUND(#1374,.T.); +#1376=IFCFACE((#1375)); +#1377=IFCPOLYLOOP((#432,#772,#613)); +#1378=IFCFACEOUTERBOUND(#1377,.T.); +#1379=IFCFACE((#1378)); +#1380=IFCPOLYLOOP((#593,#540,#663)); +#1381=IFCFACEOUTERBOUND(#1380,.T.); +#1382=IFCFACE((#1381)); +#1383=IFCPOLYLOOP((#730,#736,#731)); +#1384=IFCFACEOUTERBOUND(#1383,.T.); +#1385=IFCFACE((#1384)); +#1386=IFCPOLYLOOP((#521,#526,#593)); +#1387=IFCFACEOUTERBOUND(#1386,.T.); +#1388=IFCFACE((#1387)); +#1389=IFCPOLYLOOP((#536,#420,#444)); +#1390=IFCFACEOUTERBOUND(#1389,.T.); +#1391=IFCFACE((#1390)); +#1392=IFCPOLYLOOP((#667,#738,#715)); +#1393=IFCFACEOUTERBOUND(#1392,.T.); +#1394=IFCFACE((#1393)); +#1395=IFCPOLYLOOP((#538,#587,#472)); +#1396=IFCFACEOUTERBOUND(#1395,.T.); +#1397=IFCFACE((#1396)); +#1398=IFCPOLYLOOP((#561,#526,#546)); +#1399=IFCFACEOUTERBOUND(#1398,.T.); +#1400=IFCFACE((#1399)); +#1401=IFCPOLYLOOP((#643,#634,#501)); +#1402=IFCFACEOUTERBOUND(#1401,.T.); +#1403=IFCFACE((#1402)); +#1404=IFCPOLYLOOP((#584,#500,#463)); +#1405=IFCFACEOUTERBOUND(#1404,.T.); +#1406=IFCFACE((#1405)); +#1407=IFCPOLYLOOP((#503,#517,#515)); +#1408=IFCFACEOUTERBOUND(#1407,.T.); +#1409=IFCFACE((#1408)); +#1410=IFCPOLYLOOP((#426,#535,#539)); +#1411=IFCFACEOUTERBOUND(#1410,.T.); +#1412=IFCFACE((#1411)); +#1413=IFCPOLYLOOP((#725,#653,#753)); +#1414=IFCFACEOUTERBOUND(#1413,.T.); +#1415=IFCFACE((#1414)); +#1416=IFCPOLYLOOP((#560,#524,#551)); +#1417=IFCFACEOUTERBOUND(#1416,.T.); +#1418=IFCFACE((#1417)); +#1419=IFCPOLYLOOP((#552,#585,#586)); +#1420=IFCFACEOUTERBOUND(#1419,.T.); +#1421=IFCFACE((#1420)); +#1422=IFCPOLYLOOP((#556,#530,#553)); +#1423=IFCFACEOUTERBOUND(#1422,.T.); +#1424=IFCFACE((#1423)); +#1425=IFCPOLYLOOP((#750,#744,#741,#748)); +#1426=IFCFACEOUTERBOUND(#1425,.T.); +#1427=IFCFACE((#1426)); +#1428=IFCPOLYLOOP((#762,#619,#757,#650)); +#1429=IFCFACEOUTERBOUND(#1428,.T.); +#1430=IFCFACE((#1429)); +#1431=IFCPOLYLOOP((#679,#493,#484)); +#1432=IFCFACEOUTERBOUND(#1431,.T.); +#1433=IFCFACE((#1432)); +#1434=IFCPOLYLOOP((#644,#441,#643)); +#1435=IFCFACEOUTERBOUND(#1434,.T.); +#1436=IFCFACE((#1435)); +#1437=IFCPOLYLOOP((#418,#587,#438)); +#1438=IFCFACEOUTERBOUND(#1437,.T.); +#1439=IFCFACE((#1438)); +#1440=IFCPOLYLOOP((#697,#699,#678)); +#1441=IFCFACEOUTERBOUND(#1440,.T.); +#1442=IFCFACE((#1441)); +#1443=IFCPOLYLOOP((#754,#755,#748,#746)); +#1444=IFCFACEOUTERBOUND(#1443,.T.); +#1445=IFCFACE((#1444)); +#1446=IFCPOLYLOOP((#552,#516,#500)); +#1447=IFCFACEOUTERBOUND(#1446,.T.); +#1448=IFCFACE((#1447)); +#1449=IFCPOLYLOOP((#717,#729,#668)); +#1450=IFCFACEOUTERBOUND(#1449,.T.); +#1451=IFCFACE((#1450)); +#1452=IFCPOLYLOOP((#558,#574,#612)); +#1453=IFCFACEOUTERBOUND(#1452,.T.); +#1454=IFCFACE((#1453)); +#1455=IFCPOLYLOOP((#630,#527,#450)); +#1456=IFCFACEOUTERBOUND(#1455,.T.); +#1457=IFCFACE((#1456)); +#1458=IFCPOLYLOOP((#755,#768,#750,#748)); +#1459=IFCFACEOUTERBOUND(#1458,.T.); +#1460=IFCFACE((#1459)); +#1461=IFCPOLYLOOP((#759,#766,#620,#761)); +#1462=IFCFACEOUTERBOUND(#1461,.T.); +#1463=IFCFACE((#1462)); +#1464=IFCPOLYLOOP((#753,#743,#725)); +#1465=IFCFACEOUTERBOUND(#1464,.T.); +#1466=IFCFACE((#1465)); +#1467=IFCPOLYLOOP((#722,#728,#731)); +#1468=IFCFACEOUTERBOUND(#1467,.T.); +#1469=IFCFACE((#1468)); +#1470=IFCPOLYLOOP((#742,#715,#738,#744)); +#1471=IFCFACEOUTERBOUND(#1470,.T.); +#1472=IFCFACE((#1471)); +#1473=IFCPOLYLOOP((#730,#703,#706)); +#1474=IFCFACEOUTERBOUND(#1473,.T.); +#1475=IFCFACE((#1474)); +#1476=IFCPOLYLOOP((#516,#463,#500)); +#1477=IFCFACEOUTERBOUND(#1476,.T.); +#1478=IFCFACE((#1477)); +#1479=IFCPOLYLOOP((#666,#602,#646)); +#1480=IFCFACEOUTERBOUND(#1479,.T.); +#1481=IFCFACE((#1480)); +#1482=IFCPOLYLOOP((#676,#455,#445)); +#1483=IFCFACEOUTERBOUND(#1482,.T.); +#1484=IFCFACE((#1483)); +#1485=IFCPOLYLOOP((#722,#665,#719)); +#1486=IFCFACEOUTERBOUND(#1485,.T.); +#1487=IFCFACE((#1486)); +#1488=IFCPOLYLOOP((#571,#461,#616)); +#1489=IFCFACEOUTERBOUND(#1488,.T.); +#1490=IFCFACE((#1489)); +#1491=IFCPOLYLOOP((#675,#670,#659)); +#1492=IFCFACEOUTERBOUND(#1491,.T.); +#1493=IFCFACE((#1492)); +#1494=IFCPOLYLOOP((#622,#650,#506)); +#1495=IFCFACEOUTERBOUND(#1494,.T.); +#1496=IFCFACE((#1495)); +#1497=IFCPOLYLOOP((#498,#583,#589)); +#1498=IFCFACEOUTERBOUND(#1497,.T.); +#1499=IFCFACE((#1498)); +#1500=IFCPOLYLOOP((#747,#750,#768,#769)); +#1501=IFCFACEOUTERBOUND(#1500,.T.); +#1502=IFCFACE((#1501)); +#1503=IFCPOLYLOOP((#444,#557,#536)); +#1504=IFCFACEOUTERBOUND(#1503,.T.); +#1505=IFCFACE((#1504)); +#1506=IFCPOLYLOOP((#749,#718,#742,#747)); +#1507=IFCFACEOUTERBOUND(#1506,.T.); +#1508=IFCFACE((#1507)); +#1509=IFCPOLYLOOP((#412,#525,#608)); +#1510=IFCFACEOUTERBOUND(#1509,.T.); +#1511=IFCFACE((#1510)); +#1512=IFCPOLYLOOP((#436,#468,#527)); +#1513=IFCFACEOUTERBOUND(#1512,.T.); +#1514=IFCFACE((#1513)); +#1515=IFCPOLYLOOP((#492,#513,#486)); +#1516=IFCFACEOUTERBOUND(#1515,.T.); +#1517=IFCFACE((#1516)); +#1518=IFCPOLYLOOP((#537,#532,#485)); +#1519=IFCFACEOUTERBOUND(#1518,.T.); +#1520=IFCFACE((#1519)); +#1521=IFCPOLYLOOP((#597,#723,#724)); +#1522=IFCFACEOUTERBOUND(#1521,.T.); +#1523=IFCFACE((#1522)); +#1524=IFCPOLYLOOP((#774,#771,#773)); +#1525=IFCFACEOUTERBOUND(#1524,.T.); +#1526=IFCFACE((#1525)); +#1527=IFCPOLYLOOP((#410,#413,#446)); +#1528=IFCFACEOUTERBOUND(#1527,.T.); +#1529=IFCFACE((#1528)); +#1530=IFCPOLYLOOP((#618,#590,#686)); +#1531=IFCFACEOUTERBOUND(#1530,.T.); +#1532=IFCFACE((#1531)); +#1533=IFCPOLYLOOP((#604,#479,#570)); +#1534=IFCFACEOUTERBOUND(#1533,.T.); +#1535=IFCFACE((#1534)); +#1536=IFCPOLYLOOP((#779,#483,#543)); +#1537=IFCFACEOUTERBOUND(#1536,.T.); +#1538=IFCFACE((#1537)); +#1539=IFCPOLYLOOP((#499,#713,#737)); +#1540=IFCFACEOUTERBOUND(#1539,.T.); +#1541=IFCFACE((#1540)); +#1542=IFCPOLYLOOP((#625,#453,#476)); +#1543=IFCFACEOUTERBOUND(#1542,.T.); +#1544=IFCFACE((#1543)); +#1545=IFCPOLYLOOP((#440,#677,#415)); +#1546=IFCFACEOUTERBOUND(#1545,.T.); +#1547=IFCFACE((#1546)); +#1548=IFCPOLYLOOP((#473,#559,#655)); +#1549=IFCFACEOUTERBOUND(#1548,.T.); +#1550=IFCFACE((#1549)); +#1551=IFCPOLYLOOP((#720,#706,#693)); +#1552=IFCFACEOUTERBOUND(#1551,.T.); +#1553=IFCFACE((#1552)); +#1554=IFCPOLYLOOP((#701,#708,#707)); +#1555=IFCFACEOUTERBOUND(#1554,.T.); +#1556=IFCFACE((#1555)); +#1557=IFCPOLYLOOP((#599,#563,#600)); +#1558=IFCFACEOUTERBOUND(#1557,.T.); +#1559=IFCFACE((#1558)); +#1560=IFCPOLYLOOP((#514,#590,#459)); +#1561=IFCFACEOUTERBOUND(#1560,.T.); +#1562=IFCFACE((#1561)); +#1563=IFCPOLYLOOP((#727,#728,#719)); +#1564=IFCFACEOUTERBOUND(#1563,.T.); +#1565=IFCFACE((#1564)); +#1566=IFCPOLYLOOP((#576,#487,#646)); +#1567=IFCFACEOUTERBOUND(#1566,.T.); +#1568=IFCFACE((#1567)); +#1569=IFCPOLYLOOP((#465,#623,#486)); +#1570=IFCFACEOUTERBOUND(#1569,.T.); +#1571=IFCFACE((#1570)); +#1572=IFCPOLYLOOP((#687,#695,#669)); +#1573=IFCFACEOUTERBOUND(#1572,.T.); +#1574=IFCFACE((#1573)); +#1575=IFCPOLYLOOP((#588,#579,#581)); +#1576=IFCFACEOUTERBOUND(#1575,.T.); +#1577=IFCFACE((#1576)); +#1578=IFCPOLYLOOP((#753,#650,#751)); +#1579=IFCFACEOUTERBOUND(#1578,.T.); +#1580=IFCFACE((#1579)); +#1581=IFCPOLYLOOP((#578,#570,#479)); +#1582=IFCFACEOUTERBOUND(#1581,.T.); +#1583=IFCFACE((#1582)); +#1584=IFCPOLYLOOP((#452,#767,#765)); +#1585=IFCFACEOUTERBOUND(#1584,.T.); +#1586=IFCFACE((#1585)); +#1587=IFCPOLYLOOP((#603,#641,#450)); +#1588=IFCFACEOUTERBOUND(#1587,.T.); +#1589=IFCFACE((#1588)); +#1590=IFCPOLYLOOP((#568,#646,#602)); +#1591=IFCFACEOUTERBOUND(#1590,.T.); +#1592=IFCFACE((#1591)); +#1593=IFCPOLYLOOP((#694,#721,#739,#740)); +#1594=IFCFACEOUTERBOUND(#1593,.T.); +#1595=IFCFACE((#1594)); +#1596=IFCPOLYLOOP((#621,#702,#564)); +#1597=IFCFACEOUTERBOUND(#1596,.T.); +#1598=IFCFACE((#1597)); +#1599=IFCPOLYLOOP((#597,#604,#483)); +#1600=IFCFACEOUTERBOUND(#1599,.T.); +#1601=IFCFACE((#1600)); +#1602=IFCPOLYLOOP((#657,#570,#569)); +#1603=IFCFACEOUTERBOUND(#1602,.T.); +#1604=IFCFACE((#1603)); +#1605=IFCPOLYLOOP((#606,#520,#455)); +#1606=IFCFACEOUTERBOUND(#1605,.T.); +#1607=IFCFACE((#1606)); +#1608=IFCPOLYLOOP((#640,#770,#672)); +#1609=IFCFACEOUTERBOUND(#1608,.T.); +#1610=IFCFACE((#1609)); +#1611=IFCPOLYLOOP((#574,#477,#567)); +#1612=IFCFACEOUTERBOUND(#1611,.T.); +#1613=IFCFACE((#1612)); +#1614=IFCPOLYLOOP((#764,#732,#700)); +#1615=IFCFACEOUTERBOUND(#1614,.T.); +#1616=IFCFACE((#1615)); +#1617=IFCPOLYLOOP((#758,#754,#752,#757)); +#1618=IFCFACEOUTERBOUND(#1617,.T.); +#1619=IFCFACE((#1618)); +#1620=IFCPOLYLOOP((#763,#761,#620,#618)); +#1621=IFCFACEOUTERBOUND(#1620,.T.); +#1622=IFCFACE((#1621)); +#1623=IFCPOLYLOOP((#547,#514,#529)); +#1624=IFCFACEOUTERBOUND(#1623,.T.); +#1625=IFCFACE((#1624)); +#1626=IFCPOLYLOOP((#669,#718,#749,#687)); +#1627=IFCFACEOUTERBOUND(#1626,.T.); +#1628=IFCFACE((#1627)); +#1629=IFCPOLYLOOP((#656,#665,#664)); +#1630=IFCFACEOUTERBOUND(#1629,.T.); +#1631=IFCFACE((#1630)); +#1632=IFCPOLYLOOP((#709,#741,#744,#738)); +#1633=IFCFACEOUTERBOUND(#1632,.T.); +#1634=IFCFACE((#1633)); +#1635=IFCPOLYLOOP((#535,#520,#428)); +#1636=IFCFACEOUTERBOUND(#1635,.T.); +#1637=IFCFACE((#1636)); +#1638=IFCPOLYLOOP((#508,#572,#657)); +#1639=IFCFACEOUTERBOUND(#1638,.T.); +#1640=IFCFACE((#1639)); +#1641=IFCPOLYLOOP((#530,#503,#515)); +#1642=IFCFACEOUTERBOUND(#1641,.T.); +#1643=IFCFACE((#1642)); +#1644=IFCPOLYLOOP((#451,#679,#680)); +#1645=IFCFACEOUTERBOUND(#1644,.T.); +#1646=IFCFACE((#1645)); +#1647=IFCPOLYLOOP((#634,#524,#501)); +#1648=IFCFACEOUTERBOUND(#1647,.T.); +#1649=IFCFACE((#1648)); +#1650=IFCPOLYLOOP((#683,#687,#749,#756)); +#1651=IFCFACEOUTERBOUND(#1650,.T.); +#1652=IFCFACE((#1651)); +#1653=IFCPOLYLOOP((#471,#493,#679)); +#1654=IFCFACEOUTERBOUND(#1653,.T.); +#1655=IFCFACE((#1654)); +#1656=IFCPOLYLOOP((#661,#675,#659)); +#1657=IFCFACEOUTERBOUND(#1656,.T.); +#1658=IFCFACE((#1657)); +#1659=IFCPOLYLOOP((#661,#635,#628)); +#1660=IFCFACEOUTERBOUND(#1659,.T.); +#1661=IFCFACE((#1660)); +#1662=IFCPOLYLOOP((#720,#657,#569)); +#1663=IFCFACEOUTERBOUND(#1662,.T.); +#1664=IFCFACE((#1663)); +#1665=IFCPOLYLOOP((#421,#407,#457)); +#1666=IFCFACEOUTERBOUND(#1665,.T.); +#1667=IFCFACE((#1666)); +#1668=IFCPOLYLOOP((#677,#575,#670)); +#1669=IFCFACEOUTERBOUND(#1668,.T.); +#1670=IFCFACE((#1669)); +#1671=IFCPOLYLOOP((#664,#674,#662)); +#1672=IFCFACEOUTERBOUND(#1671,.T.); +#1673=IFCFACE((#1672)); +#1674=IFCPOLYLOOP((#766,#462,#620)); +#1675=IFCFACEOUTERBOUND(#1674,.T.); +#1676=IFCFACE((#1675)); +#1677=IFCPOLYLOOP((#452,#512,#511)); +#1678=IFCFACEOUTERBOUND(#1677,.T.); +#1679=IFCFACE((#1678)); +#1680=IFCPOLYLOOP((#461,#469,#437)); +#1681=IFCFACEOUTERBOUND(#1680,.T.); +#1682=IFCFACE((#1681)); +#1683=IFCPOLYLOOP((#564,#576,#568)); +#1684=IFCFACEOUTERBOUND(#1683,.T.); +#1685=IFCFACE((#1684)); +#1686=IFCPOLYLOOP((#594,#639,#588)); +#1687=IFCFACEOUTERBOUND(#1686,.T.); +#1688=IFCFACE((#1687)); +#1689=IFCPOLYLOOP((#758,#757,#619,#765)); +#1690=IFCFACEOUTERBOUND(#1689,.T.); +#1691=IFCFACE((#1690)); +#1692=IFCPOLYLOOP((#662,#675,#660)); +#1693=IFCFACEOUTERBOUND(#1692,.T.); +#1694=IFCFACE((#1693)); +#1695=IFCPOLYLOOP((#559,#770,#655)); +#1696=IFCFACEOUTERBOUND(#1695,.T.); +#1697=IFCFACE((#1696)); +#1698=IFCPOLYLOOP((#769,#761,#763,#756)); +#1699=IFCFACEOUTERBOUND(#1698,.T.); +#1700=IFCFACE((#1699)); +#1701=IFCPOLYLOOP((#573,#424,#430)); +#1702=IFCFACEOUTERBOUND(#1701,.T.); +#1703=IFCFACE((#1702)); +#1704=IFCPOLYLOOP((#716,#578,#629)); +#1705=IFCFACEOUTERBOUND(#1704,.T.); +#1706=IFCFACE((#1705)); +#1707=IFCPOLYLOOP((#677,#447,#415)); +#1708=IFCFACEOUTERBOUND(#1707,.T.); +#1709=IFCFACE((#1708)); +#1710=IFCPOLYLOOP((#668,#721,#694)); +#1711=IFCFACEOUTERBOUND(#1710,.T.); +#1712=IFCFACE((#1711)); +#1713=IFCPOLYLOOP((#691,#700,#697)); +#1714=IFCFACEOUTERBOUND(#1713,.T.); +#1715=IFCFACE((#1714)); +#1716=IFCPOLYLOOP((#563,#553,#554)); +#1717=IFCFACEOUTERBOUND(#1716,.T.); +#1718=IFCFACE((#1717)); +#1719=IFCPOLYLOOP((#671,#709,#738)); +#1720=IFCFACEOUTERBOUND(#1719,.T.); +#1721=IFCFACE((#1720)); +#1722=IFCPOLYLOOP((#610,#615,#504)); +#1723=IFCFACEOUTERBOUND(#1722,.T.); +#1724=IFCFACE((#1723)); +#1725=IFCPOLYLOOP((#530,#554,#553)); +#1726=IFCFACEOUTERBOUND(#1725,.T.); +#1727=IFCFACE((#1726)); +#1728=IFCPOLYLOOP((#692,#518,#548)); +#1729=IFCFACEOUTERBOUND(#1728,.T.); +#1730=IFCFACE((#1729)); +#1731=IFCPOLYLOOP((#670,#505,#677)); +#1732=IFCFACEOUTERBOUND(#1731,.T.); +#1733=IFCFACE((#1732)); +#1734=IFCPOLYLOOP((#527,#446,#436)); +#1735=IFCFACEOUTERBOUND(#1734,.T.); +#1736=IFCFACE((#1735)); +#1737=IFCPOLYLOOP((#659,#575,#635)); +#1738=IFCFACEOUTERBOUND(#1737,.T.); +#1739=IFCFACE((#1738)); +#1740=IFCPOLYLOOP((#438,#520,#418)); +#1741=IFCFACEOUTERBOUND(#1740,.T.); +#1742=IFCFACE((#1741)); +#1743=IFCPOLYLOOP((#495,#407,#496)); +#1744=IFCFACEOUTERBOUND(#1743,.T.); +#1745=IFCFACE((#1744)); +#1746=IFCPOLYLOOP((#691,#547,#542)); +#1747=IFCFACEOUTERBOUND(#1746,.T.); +#1748=IFCFACE((#1747)); +#1749=IFCPOLYLOOP((#481,#416,#475)); +#1750=IFCFACEOUTERBOUND(#1749,.T.); +#1751=IFCFACE((#1750)); +#1752=IFCPOLYLOOP((#499,#582,#565)); +#1753=IFCFACEOUTERBOUND(#1752,.T.); +#1754=IFCFACE((#1753)); +#1755=IFCPOLYLOOP((#689,#684,#685)); +#1756=IFCFACEOUTERBOUND(#1755,.T.); +#1757=IFCFACE((#1756)); +#1758=IFCPOLYLOOP((#646,#543,#666)); +#1759=IFCFACEOUTERBOUND(#1758,.T.); +#1760=IFCFACE((#1759)); +#1761=IFCPOLYLOOP((#736,#722,#731)); +#1762=IFCFACEOUTERBOUND(#1761,.T.); +#1763=IFCFACE((#1762)); +#1764=IFCPOLYLOOP((#630,#643,#441)); +#1765=IFCFACEOUTERBOUND(#1764,.T.); +#1766=IFCFACE((#1765)); +#1767=IFCPOLYLOOP((#579,#623,#541)); +#1768=IFCFACEOUTERBOUND(#1767,.T.); +#1769=IFCFACE((#1768)); +#1770=IFCPOLYLOOP((#581,#498,#588)); +#1771=IFCFACEOUTERBOUND(#1770,.T.); +#1772=IFCFACE((#1771)); +#1773=IFCPOLYLOOP((#507,#630,#441)); +#1774=IFCFACEOUTERBOUND(#1773,.T.); +#1775=IFCFACE((#1774)); +#1776=IFCPOLYLOOP((#776,#775,#469)); +#1777=IFCFACEOUTERBOUND(#1776,.T.); +#1778=IFCFACE((#1777)); +#1779=IFCPOLYLOOP((#745,#739,#648,#743)); +#1780=IFCFACEOUTERBOUND(#1779,.T.); +#1781=IFCFACE((#1780)); +#1782=IFCPOLYLOOP((#505,#473,#447)); +#1783=IFCFACEOUTERBOUND(#1782,.T.); +#1784=IFCFACE((#1783)); +#1785=IFCPOLYLOOP((#550,#596,#586)); +#1786=IFCFACEOUTERBOUND(#1785,.T.); +#1787=IFCFACE((#1786)); +#1788=IFCPOLYLOOP((#456,#481,#409)); +#1789=IFCFACEOUTERBOUND(#1788,.T.); +#1790=IFCFACE((#1789)); +#1791=IFCPOLYLOOP((#537,#464,#456)); +#1792=IFCFACEOUTERBOUND(#1791,.T.); +#1793=IFCFACE((#1792)); +#1794=IFCPOLYLOOP((#432,#647,#617)); +#1795=IFCFACEOUTERBOUND(#1794,.T.); +#1796=IFCFACE((#1795)); +#1797=IFCPOLYLOOP((#514,#530,#529)); +#1798=IFCFACEOUTERBOUND(#1797,.T.); +#1799=IFCFACE((#1798)); +#1800=IFCPOLYLOOP((#544,#592,#580)); +#1801=IFCFACEOUTERBOUND(#1800,.T.); +#1802=IFCFACE((#1801)); +#1803=IFCPOLYLOOP((#745,#746,#740,#739)); +#1804=IFCFACEOUTERBOUND(#1803,.T.); +#1805=IFCFACE((#1804)); +#1806=IFCPOLYLOOP((#486,#535,#465)); +#1807=IFCFACEOUTERBOUND(#1806,.T.); +#1808=IFCFACE((#1807)); +#1809=IFCPOLYLOOP((#694,#740,#741,#709)); +#1810=IFCFACEOUTERBOUND(#1809,.T.); +#1811=IFCFACE((#1810)); +#1812=IFCPOLYLOOP((#513,#455,#520)); +#1813=IFCFACEOUTERBOUND(#1812,.T.); +#1814=IFCFACE((#1813)); +#1815=IFCPOLYLOOP((#614,#433,#494)); +#1816=IFCFACEOUTERBOUND(#1815,.T.); +#1817=IFCFACE((#1816)); +#1818=IFCPOLYLOOP((#449,#434,#425)); +#1819=IFCFACEOUTERBOUND(#1818,.T.); +#1820=IFCFACE((#1819)); +#1821=IFCPOLYLOOP((#608,#600,#412)); +#1822=IFCFACEOUTERBOUND(#1821,.T.); +#1823=IFCFACE((#1822)); +#1824=IFCPOLYLOOP((#633,#642,#641)); +#1825=IFCFACEOUTERBOUND(#1824,.T.); +#1826=IFCFACE((#1825)); +#1827=IFCPOLYLOOP((#565,#621,#564)); +#1828=IFCFACEOUTERBOUND(#1827,.T.); +#1829=IFCFACE((#1828)); +#1830=IFCPOLYLOOP((#709,#668,#694)); +#1831=IFCFACEOUTERBOUND(#1830,.T.); +#1832=IFCFACE((#1831)); +#1833=IFCPOLYLOOP((#488,#464,#485)); +#1834=IFCFACEOUTERBOUND(#1833,.T.); +#1835=IFCFACE((#1834)); +#1836=IFCPOLYLOOP((#589,#594,#588)); +#1837=IFCFACEOUTERBOUND(#1836,.T.); +#1838=IFCFACE((#1837)); +#1839=IFCPOLYLOOP((#409,#537,#456)); +#1840=IFCFACEOUTERBOUND(#1839,.T.); +#1841=IFCFACE((#1840)); +#1842=IFCPOLYLOOP((#593,#591,#521)); +#1843=IFCFACEOUTERBOUND(#1842,.T.); +#1844=IFCFACE((#1843)); +#1845=IFCPOLYLOOP((#630,#641,#642)); +#1846=IFCFACEOUTERBOUND(#1845,.T.); +#1847=IFCFACE((#1846)); +#1848=IFCPOLYLOOP((#427,#681,#601)); +#1849=IFCFACEOUTERBOUND(#1848,.T.); +#1850=IFCFACE((#1849)); +#1851=IFCPOLYLOOP((#480,#412,#431)); +#1852=IFCFACEOUTERBOUND(#1851,.T.); +#1853=IFCFACE((#1852)); +#1854=IFCPOLYLOOP((#698,#678,#699)); +#1855=IFCFACEOUTERBOUND(#1854,.T.); +#1856=IFCFACE((#1855)); +#1857=IFCPOLYLOOP((#549,#518,#511)); +#1858=IFCFACEOUTERBOUND(#1857,.T.); +#1859=IFCFACE((#1858)); +#1860=IFCPOLYLOOP((#592,#448,#414)); +#1861=IFCFACEOUTERBOUND(#1860,.T.); +#1862=IFCFACE((#1861)); +#1863=IFCPOLYLOOP((#445,#607,#489)); +#1864=IFCFACEOUTERBOUND(#1863,.T.); +#1865=IFCFACE((#1864)); +#1866=IFCPOLYLOOP((#417,#447,#490)); +#1867=IFCFACEOUTERBOUND(#1866,.T.); +#1868=IFCFACE((#1867)); +#1869=IFCPOLYLOOP((#759,#768,#755,#760)); +#1870=IFCFACEOUTERBOUND(#1869,.T.); +#1871=IFCFACE((#1870)); +#1872=IFCPOLYLOOP((#638,#529,#581)); +#1873=IFCFACEOUTERBOUND(#1872,.T.); +#1874=IFCFACE((#1873)); +#1875=IFCPOLYLOOP((#444,#442,#454)); +#1876=IFCFACEOUTERBOUND(#1875,.T.); +#1877=IFCFACE((#1876)); +#1878=IFCPOLYLOOP((#676,#489,#424)); +#1879=IFCFACEOUTERBOUND(#1878,.T.); +#1880=IFCFACE((#1879)); +#1881=IFCPOLYLOOP((#619,#452,#765)); +#1882=IFCFACEOUTERBOUND(#1881,.T.); +#1883=IFCFACE((#1882)); +#1884=IFCPOLYLOOP((#443,#645,#705)); +#1885=IFCFACEOUTERBOUND(#1884,.T.); +#1886=IFCFACE((#1885)); +#1887=IFCPOLYLOOP((#715,#696,#667)); +#1888=IFCFACEOUTERBOUND(#1887,.T.); +#1889=IFCFACE((#1888)); +#1890=IFCPOLYLOOP((#473,#490,#447)); +#1891=IFCFACEOUTERBOUND(#1890,.T.); +#1892=IFCFACE((#1891)); +#1893=IFCPOLYLOOP((#714,#565,#582)); +#1894=IFCFACEOUTERBOUND(#1893,.T.); +#1895=IFCFACE((#1894)); +#1896=IFCPOLYLOOP((#606,#573,#482)); +#1897=IFCFACEOUTERBOUND(#1896,.T.); +#1898=IFCFACE((#1897)); +#1899=IFCPOLYLOOP((#652,#654,#651)); +#1900=IFCFACEOUTERBOUND(#1899,.T.); +#1901=IFCFACE((#1900)); +#1902=IFCPOLYLOOP((#700,#542,#764)); +#1903=IFCFACEOUTERBOUND(#1902,.T.); +#1904=IFCFACE((#1903)); +#1905=IFCPOLYLOOP((#446,#413,#427)); +#1906=IFCFACEOUTERBOUND(#1905,.T.); +#1907=IFCFACE((#1906)); +#1908=IFCPOLYLOOP((#607,#610,#489)); +#1909=IFCFACEOUTERBOUND(#1908,.T.); +#1910=IFCFACE((#1909)); +#1911=IFCPOLYLOOP((#606,#676,#573)); +#1912=IFCFACEOUTERBOUND(#1911,.T.); +#1913=IFCFACE((#1912)); +#1914=IFCPOLYLOOP((#746,#748,#741,#740)); +#1915=IFCFACEOUTERBOUND(#1914,.T.); +#1916=IFCFACE((#1915)); +#1917=IFCPOLYLOOP((#533,#439,#423)); +#1918=IFCFACEOUTERBOUND(#1917,.T.); +#1919=IFCFACE((#1918)); +#1920=IFCPOLYLOOP((#406,#566,#595)); +#1921=IFCFACEOUTERBOUND(#1920,.T.); +#1922=IFCFACE((#1921)); +#1923=IFCPOLYLOOP((#770,#710,#502)); +#1924=IFCFACEOUTERBOUND(#1923,.T.); +#1925=IFCFACE((#1924)); +#1926=IFCPOLYLOOP((#765,#767,#760,#758)); +#1927=IFCFACEOUTERBOUND(#1926,.T.); +#1928=IFCFACE((#1927)); +#1929=IFCPOLYLOOP((#472,#421,#538)); +#1930=IFCFACEOUTERBOUND(#1929,.T.); +#1931=IFCFACE((#1930)); +#1932=IFCPOLYLOOP((#458,#577,#605)); +#1933=IFCFACEOUTERBOUND(#1932,.T.); +#1934=IFCFACE((#1933)); +#1935=IFCPOLYLOOP((#614,#571,#555)); +#1936=IFCFACEOUTERBOUND(#1935,.T.); +#1937=IFCFACE((#1936)); +#1938=IFCPOLYLOOP((#560,#575,#501)); +#1939=IFCFACEOUTERBOUND(#1938,.T.); +#1940=IFCFACE((#1939)); +#1941=IFCPOLYLOOP((#458,#555,#497)); +#1942=IFCFACEOUTERBOUND(#1941,.T.); +#1943=IFCFACE((#1942)); +#1944=IFCPOLYLOOP((#463,#412,#600)); +#1945=IFCFACEOUTERBOUND(#1944,.T.); +#1946=IFCFACE((#1945)); +#1947=IFCPOLYLOOP((#617,#614,#494)); +#1948=IFCFACEOUTERBOUND(#1947,.T.); +#1949=IFCFACE((#1948)); +#1950=IFCPOLYLOOP((#458,#775,#777)); +#1951=IFCFACEOUTERBOUND(#1950,.T.); +#1952=IFCFACE((#1951)); +#1953=IFCPOLYLOOP((#534,#647,#613)); +#1954=IFCFACEOUTERBOUND(#1953,.T.); +#1955=IFCFACE((#1954)); +#1956=IFCPOLYLOOP((#763,#618,#686,#684)); +#1957=IFCFACEOUTERBOUND(#1956,.T.); +#1958=IFCFACE((#1957)); +#1959=IFCPOLYLOOP((#546,#521,#592)); +#1960=IFCFACEOUTERBOUND(#1959,.T.); +#1961=IFCFACE((#1960)); +#1962=IFCPOLYLOOP((#432,#771,#772)); +#1963=IFCFACEOUTERBOUND(#1962,.T.); +#1964=IFCFACE((#1963)); +#1965=IFCPOLYLOOP((#641,#632,#633)); +#1966=IFCFACEOUTERBOUND(#1965,.T.); +#1967=IFCFACE((#1966)); +#1968=IFCPOLYLOOP((#766,#509,#503)); +#1969=IFCFACEOUTERBOUND(#1968,.T.); +#1970=IFCFACE((#1969)); +#1971=IFCPOLYLOOP((#695,#718,#669)); +#1972=IFCFACEOUTERBOUND(#1971,.T.); +#1973=IFCFACE((#1972)); +#1974=IFCPOLYLOOP((#449,#474,#422)); +#1975=IFCFACEOUTERBOUND(#1974,.T.); +#1976=IFCFACE((#1975)); +#1977=IFCPOLYLOOP((#614,#776,#571)); +#1978=IFCFACEOUTERBOUND(#1977,.T.); +#1979=IFCFACE((#1978)); +#1980=IFCPOLYLOOP((#466,#467,#580)); +#1981=IFCFACEOUTERBOUND(#1980,.T.); +#1982=IFCFACE((#1981)); +#1983=IFCPOLYLOOP((#495,#423,#439)); +#1984=IFCFACEOUTERBOUND(#1983,.T.); +#1985=IFCFACE((#1984)); +#1986=IFCPOLYLOOP((#610,#607,#615)); +#1987=IFCFACEOUTERBOUND(#1986,.T.); +#1988=IFCFACE((#1987)); +#1989=IFCPOLYLOOP((#673,#664,#665)); +#1990=IFCFACEOUTERBOUND(#1989,.T.); +#1991=IFCFACE((#1990)); +#1992=IFCPOLYLOOP((#457,#439,#533)); +#1993=IFCFACEOUTERBOUND(#1992,.T.); +#1994=IFCFACE((#1993)); +#1995=IFCPOLYLOOP((#458,#433,#555)); +#1996=IFCFACEOUTERBOUND(#1995,.T.); +#1997=IFCFACE((#1996)); +#1998=IFCPOLYLOOP((#534,#772,#774)); +#1999=IFCFACEOUTERBOUND(#1998,.T.); +#2000=IFCFACE((#1999)); +#2001=IFCPOLYLOOP((#471,#591,#593)); +#2002=IFCFACEOUTERBOUND(#2001,.T.); +#2003=IFCFACE((#2002)); +#2004=IFCPOLYLOOP((#775,#429,#528)); +#2005=IFCFACEOUTERBOUND(#2004,.T.); +#2006=IFCFACE((#2005)); +#2007=IFCPOLYLOOP((#534,#613,#772)); +#2008=IFCFACEOUTERBOUND(#2007,.T.); +#2009=IFCFACE((#2008)); +#2010=IFCPOLYLOOP((#647,#534,#774)); +#2011=IFCFACEOUTERBOUND(#2010,.T.); +#2012=IFCFACE((#2011)); +#2013=IFCPOLYLOOP((#617,#631,#614)); +#2014=IFCFACEOUTERBOUND(#2013,.T.); +#2015=IFCFACE((#2014)); +#2016=IFCPOLYLOOP((#631,#776,#614)); +#2017=IFCFACEOUTERBOUND(#2016,.T.); +#2018=IFCFACE((#2017)); +#2019=IFCPOLYLOOP((#571,#497,#555)); +#2020=IFCFACEOUTERBOUND(#2019,.T.); +#2021=IFCFACE((#2020)); +#2022=IFCPOLYLOOP((#776,#631,#429)); +#2023=IFCFACEOUTERBOUND(#2022,.T.); +#2024=IFCFACE((#2023)); +#2025=IFCPOLYLOOP((#777,#433,#458)); +#2026=IFCFACEOUTERBOUND(#2025,.T.); +#2027=IFCFACE((#2026)); +#2028=IFCPOLYLOOP((#617,#773,#631)); +#2029=IFCFACEOUTERBOUND(#2028,.T.); +#2030=IFCFACE((#2029)); +#2031=IFCPOLYLOOP((#775,#528,#777)); +#2032=IFCFACEOUTERBOUND(#2031,.T.); +#2033=IFCFACE((#2032)); +#2034=IFCPOLYLOOP((#745,#752,#754,#746)); +#2035=IFCFACEOUTERBOUND(#2034,.T.); +#2036=IFCFACE((#2035)); +#2037=IFCPOLYLOOP((#539,#470,#621)); +#2038=IFCFACEOUTERBOUND(#2037,.T.); +#2039=IFCFACE((#2038)); +#2040=IFCPOLYLOOP((#469,#775,#437)); +#2041=IFCFACEOUTERBOUND(#2040,.T.); +#2042=IFCFACE((#2041)); +#2043=IFCPOLYLOOP((#754,#758,#760,#755)); +#2044=IFCFACEOUTERBOUND(#2043,.T.); +#2045=IFCFACE((#2044)); +#2046=IFCPOLYLOOP((#737,#734,#582)); +#2047=IFCFACEOUTERBOUND(#2046,.T.); +#2048=IFCFACE((#2047)); +#2049=IFCPOLYLOOP((#719,#658,#727)); +#2050=IFCFACEOUTERBOUND(#2049,.T.); +#2051=IFCFACE((#2050)); +#2052=IFCPOLYLOOP((#531,#416,#434)); +#2053=IFCFACEOUTERBOUND(#2052,.T.); +#2054=IFCFACE((#2053)); +#2055=IFCPOLYLOOP((#504,#532,#435)); +#2056=IFCFACEOUTERBOUND(#2055,.T.); +#2057=IFCFACE((#2056)); +#2058=IFCPOLYLOOP((#723,#409,#481)); +#2059=IFCFACEOUTERBOUND(#2058,.T.); +#2060=IFCFACE((#2059)); +#2061=IFCPOLYLOOP((#778,#562,#406)); +#2062=IFCFACEOUTERBOUND(#2061,.T.); +#2063=IFCFACE((#2062)); +#2064=IFCPOLYLOOP((#779,#487,#778)); +#2065=IFCFACEOUTERBOUND(#2064,.T.); +#2066=IFCFACE((#2065)); +#2067=IFCPOLYLOOP((#718,#678,#715)); +#2068=IFCFACEOUTERBOUND(#2067,.T.); +#2069=IFCFACE((#2068)); +#2070=IFCPOLYLOOP((#425,#408,#456)); +#2071=IFCFACEOUTERBOUND(#2070,.T.); +#2072=IFCFACE((#2071)); +#2073=IFCPOLYLOOP((#692,#548,#584)); +#2074=IFCFACEOUTERBOUND(#2073,.T.); +#2075=IFCFACE((#2074)); +#2076=IFCPOLYLOOP((#645,#541,#623)); +#2077=IFCFACEOUTERBOUND(#2076,.T.); +#2078=IFCFACE((#2077)); +#2079=IFCPOLYLOOP((#464,#480,#449)); +#2080=IFCFACEOUTERBOUND(#2079,.T.); +#2081=IFCFACE((#2080)); +#2082=IFCPOLYLOOP((#414,#466,#580)); +#2083=IFCFACEOUTERBOUND(#2082,.T.); +#2084=IFCFACE((#2083)); +#2085=IFCPOLYLOOP((#624,#551,#510)); +#2086=IFCFACEOUTERBOUND(#2085,.T.); +#2087=IFCFACE((#2086)); +#2088=IFCPOLYLOOP((#494,#433,#777)); +#2089=IFCFACEOUTERBOUND(#2088,.T.); +#2090=IFCFACE((#2089)); +#2091=IFCPOLYLOOP((#474,#552,#603)); +#2092=IFCFACEOUTERBOUND(#2091,.T.); +#2093=IFCFACE((#2092)); +#2094=IFCPOLYLOOP((#507,#441,#440)); +#2095=IFCFACEOUTERBOUND(#2094,.T.); +#2096=IFCFACE((#2095)); +#2097=IFCPOLYLOOP((#475,#601,#710)); +#2098=IFCFACEOUTERBOUND(#2097,.T.); +#2099=IFCFACE((#2098)); +#2100=IFCPOLYLOOP((#521,#591,#448)); +#2101=IFCFACEOUTERBOUND(#2100,.T.); +#2102=IFCFACE((#2101)); +#2103=IFCPOLYLOOP((#466,#448,#460)); +#2104=IFCFACEOUTERBOUND(#2103,.T.); +#2105=IFCFACE((#2104)); +#2106=IFCPOLYLOOP((#658,#656,#648)); +#2107=IFCFACEOUTERBOUND(#2106,.T.); +#2108=IFCFACE((#2107)); +#2109=IFCPOLYLOOP((#463,#600,#563)); +#2110=IFCFACEOUTERBOUND(#2109,.T.); +#2111=IFCFACE((#2110)); +#2112=IFCPOLYLOOP((#562,#545,#558)); +#2113=IFCFACEOUTERBOUND(#2112,.T.); +#2114=IFCFACE((#2113)); +#2115=IFCPOLYLOOP((#704,#705,#645)); +#2116=IFCFACEOUTERBOUND(#2115,.T.); +#2117=IFCFACE((#2116)); +#2118=IFCPOLYLOOP((#427,#531,#436)); +#2119=IFCFACEOUTERBOUND(#2118,.T.); +#2120=IFCFACE((#2119)); +#2121=IFCPOLYLOOP((#713,#707,#708)); +#2122=IFCFACEOUTERBOUND(#2121,.T.); +#2123=IFCFACE((#2122)); +#2124=IFCPOLYLOOP((#699,#733,#708)); +#2125=IFCFACEOUTERBOUND(#2124,.T.); +#2126=IFCFACE((#2125)); +#2127=IFCPOLYLOOP((#773,#771,#429)); +#2128=IFCFACEOUTERBOUND(#2127,.T.); +#2129=IFCFACE((#2128)); +#2130=IFCPOLYLOOP((#523,#506,#510)); +#2131=IFCFACEOUTERBOUND(#2130,.T.); +#2132=IFCFACE((#2131)); +#2133=IFCPOLYLOOP((#636,#673,#722)); +#2134=IFCFACEOUTERBOUND(#2133,.T.); +#2135=IFCFACE((#2134)); +#2136=IFCPOLYLOOP((#612,#574,#467)); +#2137=IFCFACEOUTERBOUND(#2136,.T.); +#2138=IFCFACE((#2137)); +#2139=IFCPOLYLOOP((#643,#501,#575)); +#2140=IFCFACEOUTERBOUND(#2139,.T.); +#2141=IFCFACE((#2140)); +#2142=IFCPOLYLOOP((#528,#432,#617)); +#2143=IFCFACEOUTERBOUND(#2142,.T.); +#2144=IFCFACE((#2143)); +#2145=IFCPOLYLOOP((#672,#559,#479)); +#2146=IFCFACEOUTERBOUND(#2145,.T.); +#2147=IFCFACE((#2146)); +#2148=IFCPOLYLOOP((#505,#674,#673)); +#2149=IFCFACEOUTERBOUND(#2148,.T.); +#2150=IFCFACE((#2149)); +#2151=IFCPOLYLOOP((#681,#413,#411)); +#2152=IFCFACEOUTERBOUND(#2151,.T.); +#2153=IFCFACE((#2152)); +#2154=IFCPOLYLOOP((#724,#710,#640)); +#2155=IFCFACEOUTERBOUND(#2154,.T.); +#2156=IFCFACE((#2155)); +#2157=IFCPOLYLOOP((#626,#597,#640)); +#2158=IFCFACEOUTERBOUND(#2157,.T.); +#2159=IFCFACE((#2158)); +#2160=IFCPOLYLOOP((#577,#519,#454)); +#2161=IFCFACEOUTERBOUND(#2160,.T.); +#2162=IFCFACE((#2161)); +#2163=IFCPOLYLOOP((#703,#717,#671)); +#2164=IFCFACEOUTERBOUND(#2163,.T.); +#2165=IFCFACE((#2164)); +#2166=IFCPOLYLOOP((#566,#611,#616)); +#2167=IFCFACEOUTERBOUND(#2166,.T.); +#2168=IFCFACE((#2167)); +#2169=IFCPOLYLOOP((#502,#710,#601)); +#2170=IFCFACEOUTERBOUND(#2169,.T.); +#2171=IFCFACE((#2170)); +#2172=IFCPOLYLOOP((#699,#700,#732)); +#2173=IFCFACEOUTERBOUND(#2172,.T.); +#2174=IFCFACE((#2173)); +#2175=IFCPOLYLOOP((#488,#485,#532)); +#2176=IFCFACEOUTERBOUND(#2175,.T.); +#2177=IFCFACE((#2176)); +#2178=IFCPOLYLOOP((#706,#703,#701)); +#2179=IFCFACEOUTERBOUND(#2178,.T.); +#2180=IFCFACE((#2179)); +#2181=IFCPOLYLOOP((#616,#519,#577)); +#2182=IFCFACEOUTERBOUND(#2181,.T.); +#2183=IFCFACE((#2182)); +#2184=IFCPOLYLOOP((#721,#727,#658)); +#2185=IFCFACEOUTERBOUND(#2184,.T.); +#2186=IFCFACE((#2185)); +#2187=IFCPOLYLOOP((#615,#609,#608)); +#2188=IFCFACEOUTERBOUND(#2187,.T.); +#2189=IFCFACE((#2188)); +#2190=IFCPOLYLOOP((#443,#581,#579)); +#2191=IFCFACEOUTERBOUND(#2190,.T.); +#2192=IFCFACE((#2191)); +#2193=IFCPOLYLOOP((#738,#667,#696)); +#2194=IFCFACEOUTERBOUND(#2193,.T.); +#2195=IFCFACE((#2194)); +#2196=IFCPOLYLOOP((#687,#683,#690)); +#2197=IFCFACEOUTERBOUND(#2196,.T.); +#2198=IFCFACE((#2197)); +#2199=IFCPOLYLOOP((#533,#442,#420)); +#2200=IFCFACEOUTERBOUND(#2199,.T.); +#2201=IFCFACE((#2200)); +#2202=IFCPOLYLOOP((#506,#753,#653)); +#2203=IFCFACEOUTERBOUND(#2202,.T.); +#2204=IFCFACE((#2203)); +#2205=IFCPOLYLOOP((#601,#475,#416)); +#2206=IFCFACEOUTERBOUND(#2205,.T.); +#2207=IFCFACE((#2206)); +#2208=IFCPOLYLOOP((#734,#735,#714)); +#2209=IFCFACEOUTERBOUND(#2208,.T.); +#2210=IFCFACE((#2209)); +#2211=IFCPOLYLOOP((#704,#712,#714)); +#2212=IFCFACEOUTERBOUND(#2211,.T.); +#2213=IFCFACE((#2212)); +#2214=IFCPOLYLOOP((#609,#607,#594)); +#2215=IFCFACEOUTERBOUND(#2214,.T.); +#2216=IFCFACE((#2215)); +#2217=IFCPOLYLOOP((#537,#405,#406)); +#2218=IFCFACEOUTERBOUND(#2217,.T.); +#2219=IFCFACE((#2218)); +#2220=IFCPOLYLOOP((#489,#610,#496)); +#2221=IFCFACEOUTERBOUND(#2220,.T.); +#2222=IFCFACE((#2221)); +#2223=IFCPOLYLOOP((#764,#638,#443)); +#2224=IFCFACEOUTERBOUND(#2223,.T.); +#2225=IFCFACE((#2224)); +#2226=IFCPOLYLOOP((#526,#561,#451)); +#2227=IFCFACEOUTERBOUND(#2226,.T.); +#2228=IFCFACE((#2227)); +#2229=IFCPOLYLOOP((#685,#684,#686)); +#2230=IFCFACEOUTERBOUND(#2229,.T.); +#2231=IFCFACE((#2230)); +#2232=IFCPOLYLOOP((#654,#624,#653)); +#2233=IFCFACEOUTERBOUND(#2232,.T.); +#2234=IFCFACE((#2233)); +#2235=IFCPOLYLOOP((#462,#459,#618)); +#2236=IFCFACEOUTERBOUND(#2235,.T.); +#2237=IFCFACE((#2236)); +#2238=IFCPOLYLOOP((#638,#764,#542)); +#2239=IFCFACEOUTERBOUND(#2238,.T.); +#2240=IFCFACE((#2239)); +#2241=IFCPOLYLOOP((#545,#576,#702)); +#2242=IFCFACEOUTERBOUND(#2241,.T.); +#2243=IFCFACE((#2242)); +#2244=IFCPOLYLOOP((#431,#516,#449)); +#2245=IFCFACEOUTERBOUND(#2244,.T.); +#2246=IFCFACE((#2245)); +#2247=IFCPOLYLOOP((#550,#586,#585)); +#2248=IFCFACEOUTERBOUND(#2247,.T.); +#2249=IFCFACE((#2248)); +#2250=IFCPOLYLOOP((#548,#549,#585)); +#2251=IFCFACEOUTERBOUND(#2250,.T.); +#2252=IFCFACE((#2251)); +#2253=IFCPOLYLOOP((#599,#598,#589)); +#2254=IFCFACEOUTERBOUND(#2253,.T.); +#2255=IFCFACE((#2254)); +#2256=IFCPOLYLOOP((#632,#625,#627)); +#2257=IFCFACEOUTERBOUND(#2256,.T.); +#2258=IFCFACE((#2257)); +#2259=IFCPOLYLOOP((#453,#619,#762)); +#2260=IFCFACEOUTERBOUND(#2259,.T.); +#2261=IFCFACE((#2260)); +#2262=IFCPOLYLOOP((#478,#567,#438)); +#2263=IFCFACEOUTERBOUND(#2262,.T.); +#2264=IFCFACE((#2263)); +#2265=IFCPOLYLOOP((#625,#476,#622)); +#2266=IFCFACEOUTERBOUND(#2265,.T.); +#2267=IFCFACE((#2266)); +#2268=IFCPOLYLOOP((#550,#549,#511)); +#2269=IFCFACEOUTERBOUND(#2268,.T.); +#2270=IFCFACE((#2269)); +#2271=IFCPOLYLOOP((#598,#599,#608)); +#2272=IFCFACEOUTERBOUND(#2271,.T.); +#2273=IFCFACE((#2272)); +#2274=IFCPOLYLOOP((#450,#527,#468)); +#2275=IFCFACEOUTERBOUND(#2274,.T.); +#2276=IFCFACE((#2275)); +#2277=IFCPOLYLOOP((#770,#502,#490)); +#2278=IFCFACEOUTERBOUND(#2277,.T.); +#2279=IFCFACE((#2278)); +#2280=IFCPOLYLOOP((#452,#511,#518)); +#2281=IFCFACEOUTERBOUND(#2280,.T.); +#2282=IFCFACE((#2281)); +#2283=IFCPOLYLOOP((#602,#508,#499)); +#2284=IFCFACEOUTERBOUND(#2283,.T.); +#2285=IFCFACE((#2284)); +#2286=IFCPOLYLOOP((#478,#587,#536)); +#2287=IFCFACEOUTERBOUND(#2286,.T.); +#2288=IFCFACE((#2287)); +#2289=IFCPOLYLOOP((#425,#434,#416)); +#2290=IFCFACEOUTERBOUND(#2289,.T.); +#2291=IFCFACE((#2290)); +#2292=IFCPOLYLOOP((#692,#554,#515)); +#2293=IFCFACEOUTERBOUND(#2292,.T.); +#2294=IFCFACE((#2293)); +#2295=IFCPOLYLOOP((#479,#559,#629)); +#2296=IFCFACEOUTERBOUND(#2295,.T.); +#2297=IFCFACE((#2296)); +#2298=IFCPOLYLOOP((#570,#572,#666)); +#2299=IFCFACEOUTERBOUND(#2298,.T.); +#2300=IFCFACE((#2299)); +#2301=IFCPOLYLOOP((#627,#523,#634)); +#2302=IFCFACEOUTERBOUND(#2301,.T.); +#2303=IFCFACE((#2302)); +#2304=IFCPOLYLOOP((#430,#424,#496)); +#2305=IFCFACEOUTERBOUND(#2304,.T.); +#2306=IFCFACE((#2305)); +#2307=IFCPOLYLOOP((#623,#639,#492)); +#2308=IFCFACEOUTERBOUND(#2307,.T.); +#2309=IFCFACE((#2308)); +#2310=IFCPOLYLOOP((#726,#668,#729)); +#2311=IFCFACEOUTERBOUND(#2310,.T.); +#2312=IFCFACE((#2311)); +#2313=IFCPOLYLOOP((#661,#628,#624)); +#2314=IFCFACEOUTERBOUND(#2313,.T.); +#2315=IFCFACE((#2314)); +#2316=IFCPOLYLOOP((#693,#713,#508)); +#2317=IFCFACEOUTERBOUND(#2316,.T.); +#2318=IFCFACE((#2317)); +#2319=IFCPOLYLOOP((#632,#550,#512)); +#2320=IFCFACEOUTERBOUND(#2319,.T.); +#2321=IFCFACE((#2320)); +#2322=IFCPOLYLOOP((#523,#627,#622)); +#2323=IFCFACEOUTERBOUND(#2322,.T.); +#2324=IFCFACE((#2323)); +#2325=IFCPOLYLOOP((#771,#432,#528)); +#2326=IFCFACEOUTERBOUND(#2325,.T.); +#2327=IFCFACE((#2326)); +#2328=IFCPOLYLOOP((#731,#728,#729)); +#2329=IFCFACEOUTERBOUND(#2328,.T.); +#2330=IFCFACE((#2329)); +#2331=IFCPOLYLOOP((#444,#454,#519)); +#2332=IFCFACEOUTERBOUND(#2331,.T.); +#2333=IFCFACE((#2332)); +#2334=IFCPOLYLOOP((#725,#656,#652)); +#2335=IFCFACEOUTERBOUND(#2334,.T.); +#2336=IFCFACE((#2335)); +#2337=IFCPOLYLOOP((#417,#490,#502)); +#2338=IFCFACEOUTERBOUND(#2337,.T.); +#2339=IFCFACE((#2338)); +#2340=IFCPOLYLOOP((#409,#779,#778)); +#2341=IFCFACEOUTERBOUND(#2340,.T.); +#2342=IFCFACE((#2341)); +#2343=IFCPOLYLOOP((#539,#621,#491)); +#2344=IFCFACEOUTERBOUND(#2343,.T.); +#2345=IFCFACE((#2344)); +#2346=IFCPOLYLOOP((#560,#551,#628)); +#2347=IFCFACEOUTERBOUND(#2346,.T.); +#2348=IFCFACE((#2347)); +#2349=IFCPOLYLOOP((#567,#478,#467)); +#2350=IFCFACEOUTERBOUND(#2349,.T.); +#2351=IFCFACE((#2350)); +#2352=IFCPOLYLOOP((#460,#561,#546)); +#2353=IFCFACEOUTERBOUND(#2352,.T.); +#2354=IFCFACE((#2353)); +#2355=IFCPOLYLOOP((#492,#594,#607)); +#2356=IFCFACEOUTERBOUND(#2355,.T.); +#2357=IFCFACE((#2356)); +#2358=IFCPOLYLOOP((#428,#438,#567)); +#2359=IFCFACEOUTERBOUND(#2358,.T.); +#2360=IFCFACE((#2359)); +#2361=IFCPOLYLOOP((#418,#606,#482)); +#2362=IFCFACEOUTERBOUND(#2361,.T.); +#2363=IFCFACE((#2362)); +#2364=IFCPOLYLOOP((#652,#656,#664)); +#2365=IFCFACEOUTERBOUND(#2364,.T.); +#2366=IFCFACE((#2365)); +#2367=IFCPOLYLOOP((#482,#573,#430)); +#2368=IFCFACEOUTERBOUND(#2367,.T.); +#2369=IFCFACE((#2368)); +#2370=IFCPOLYLOOP((#420,#538,#421)); +#2371=IFCFACEOUTERBOUND(#2370,.T.); +#2372=IFCFACE((#2371)); +#2373=IFCPOLYLOOP((#565,#564,#568)); +#2374=IFCFACEOUTERBOUND(#2373,.T.); +#2375=IFCFACE((#2374)); +#2376=IFCPOLYLOOP((#695,#688,#691)); +#2377=IFCFACEOUTERBOUND(#2376,.T.); +#2378=IFCFACE((#2377)); +#2379=IFCPOLYLOOP((#531,#434,#422)); +#2380=IFCFACEOUTERBOUND(#2379,.T.); +#2381=IFCFACE((#2380)); +#2382=IFCPOLYLOOP((#586,#596,#603)); +#2383=IFCFACEOUTERBOUND(#2382,.T.); +#2384=IFCFACE((#2383)); +#2385=IFCPOLYLOOP((#723,#481,#475)); +#2386=IFCFACEOUTERBOUND(#2385,.T.); +#2387=IFCFACE((#2386)); +#2388=IFCPOLYLOOP((#629,#473,#636)); +#2389=IFCFACEOUTERBOUND(#2388,.T.); +#2390=IFCFACE((#2389)); +#2391=IFCPOLYLOOP((#706,#707,#713)); +#2392=IFCFACEOUTERBOUND(#2391,.T.); +#2393=IFCFACE((#2392)); +#2394=IFCPOLYLOOP((#417,#411,#440)); +#2395=IFCFACEOUTERBOUND(#2394,.T.); +#2396=IFCFACE((#2395)); +#2397=IFCPOLYLOOP((#712,#426,#491)); +#2398=IFCFACEOUTERBOUND(#2397,.T.); +#2399=IFCFACE((#2398)); +#2400=IFCPOLYLOOP((#666,#543,#483)); +#2401=IFCFACEOUTERBOUND(#2400,.T.); +#2402=IFCFACE((#2401)); +#2403=IFCPOLYLOOP((#535,#428,#477)); +#2404=IFCFACEOUTERBOUND(#2403,.T.); +#2405=IFCFACE((#2404)); +#2406=IFCPOLYLOOP((#774,#773,#617)); +#2407=IFCFACEOUTERBOUND(#2406,.T.); +#2408=IFCFACE((#2407)); +#2409=IFCPOLYLOOP((#496,#610,#504)); +#2410=IFCFACEOUTERBOUND(#2409,.T.); +#2411=IFCFACE((#2410)); +#2412=IFCPOLYLOOP((#493,#540,#637)); +#2413=IFCFACEOUTERBOUND(#2412,.T.); +#2414=IFCFACE((#2413)); +#2415=IFCPOLYLOOP((#736,#720,#569)); +#2416=IFCFACEOUTERBOUND(#2415,.T.); +#2417=IFCFACE((#2416)); +#2418=IFCPOLYLOOP((#593,#526,#540)); +#2419=IFCFACEOUTERBOUND(#2418,.T.); +#2420=IFCFACE((#2419)); +#2421=IFCPOLYLOOP((#730,#720,#736)); +#2422=IFCFACEOUTERBOUND(#2421,.T.); +#2423=IFCFACE((#2422)); +#2424=IFCPOLYLOOP((#521,#546,#526)); +#2425=IFCFACEOUTERBOUND(#2424,.T.); +#2426=IFCFACE((#2425)); +#2427=IFCPOLYLOOP((#536,#538,#420)); +#2428=IFCFACEOUTERBOUND(#2427,.T.); +#2429=IFCFACE((#2428)); +#2430=IFCPOLYLOOP((#538,#536,#587)); +#2431=IFCFACEOUTERBOUND(#2430,.T.); +#2432=IFCFACE((#2431)); +#2433=IFCPOLYLOOP((#643,#642,#634)); +#2434=IFCFACEOUTERBOUND(#2433,.T.); +#2435=IFCFACE((#2434)); +#2436=IFCPOLYLOOP((#584,#585,#500)); +#2437=IFCFACEOUTERBOUND(#2436,.T.); +#2438=IFCFACE((#2437)); +#2439=IFCPOLYLOOP((#503,#509,#517)); +#2440=IFCFACEOUTERBOUND(#2439,.T.); +#2441=IFCFACE((#2440)); +#2442=IFCPOLYLOOP((#426,#465,#535)); +#2443=IFCFACEOUTERBOUND(#2442,.T.); +#2444=IFCFACE((#2443)); +#2445=IFCPOLYLOOP((#725,#651,#653)); +#2446=IFCFACEOUTERBOUND(#2445,.T.); +#2447=IFCFACE((#2446)); +#2448=IFCPOLYLOOP((#560,#501,#524)); +#2449=IFCFACEOUTERBOUND(#2448,.T.); +#2450=IFCFACE((#2449)); +#2451=IFCPOLYLOOP((#552,#500,#585)); +#2452=IFCFACEOUTERBOUND(#2451,.T.); +#2453=IFCFACE((#2452)); +#2454=IFCPOLYLOOP((#556,#529,#530)); +#2455=IFCFACEOUTERBOUND(#2454,.T.); +#2456=IFCFACE((#2455)); +#2457=IFCPOLYLOOP((#644,#440,#441)); +#2458=IFCFACEOUTERBOUND(#2457,.T.); +#2459=IFCFACE((#2458)); +#2460=IFCPOLYLOOP((#418,#472,#587)); +#2461=IFCFACEOUTERBOUND(#2460,.T.); +#2462=IFCFACE((#2461)); +#2463=IFCPOLYLOOP((#697,#700,#699)); +#2464=IFCFACEOUTERBOUND(#2463,.T.); +#2465=IFCFACE((#2464)); +#2466=IFCPOLYLOOP((#552,#474,#516)); +#2467=IFCFACEOUTERBOUND(#2466,.T.); +#2468=IFCFACE((#2467)); +#2469=IFCPOLYLOOP((#717,#703,#729)); +#2470=IFCFACEOUTERBOUND(#2469,.T.); +#2471=IFCFACE((#2470)); +#2472=IFCPOLYLOOP((#558,#470,#574)); +#2473=IFCFACEOUTERBOUND(#2472,.T.); +#2474=IFCFACE((#2473)); +#2475=IFCPOLYLOOP((#630,#410,#527)); +#2476=IFCFACEOUTERBOUND(#2475,.T.); +#2477=IFCFACE((#2476)); +#2478=IFCPOLYLOOP((#753,#751,#743)); +#2479=IFCFACEOUTERBOUND(#2478,.T.); +#2480=IFCFACE((#2479)); +#2481=IFCPOLYLOOP((#722,#719,#728)); +#2482=IFCFACEOUTERBOUND(#2481,.T.); +#2483=IFCFACE((#2482)); +#2484=IFCPOLYLOOP((#730,#729,#703)); +#2485=IFCFACEOUTERBOUND(#2484,.T.); +#2486=IFCFACE((#2485)); +#2487=IFCPOLYLOOP((#516,#431,#463)); +#2488=IFCFACEOUTERBOUND(#2487,.T.); +#2489=IFCFACE((#2488)); +#2490=IFCPOLYLOOP((#666,#572,#602)); +#2491=IFCFACEOUTERBOUND(#2490,.T.); +#2492=IFCFACE((#2491)); +#2493=IFCPOLYLOOP((#676,#606,#455)); +#2494=IFCFACEOUTERBOUND(#2493,.T.); +#2495=IFCFACE((#2494)); +#2496=IFCPOLYLOOP((#722,#673,#665)); +#2497=IFCFACEOUTERBOUND(#2496,.T.); +#2498=IFCFACE((#2497)); +#2499=IFCPOLYLOOP((#571,#469,#461)); +#2500=IFCFACEOUTERBOUND(#2499,.T.); +#2501=IFCFACE((#2500)); +#2502=IFCPOLYLOOP((#675,#674,#670)); +#2503=IFCFACEOUTERBOUND(#2502,.T.); +#2504=IFCFACE((#2503)); +#2505=IFCPOLYLOOP((#622,#476,#650)); +#2506=IFCFACEOUTERBOUND(#2505,.T.); +#2507=IFCFACE((#2506)); +#2508=IFCPOLYLOOP((#498,#553,#583)); +#2509=IFCFACEOUTERBOUND(#2508,.T.); +#2510=IFCFACE((#2509)); +#2511=IFCPOLYLOOP((#444,#466,#557)); +#2512=IFCFACEOUTERBOUND(#2511,.T.); +#2513=IFCFACE((#2512)); +#2514=IFCPOLYLOOP((#412,#488,#525)); +#2515=IFCFACEOUTERBOUND(#2514,.T.); +#2516=IFCFACE((#2515)); +#2517=IFCPOLYLOOP((#436,#422,#468)); +#2518=IFCFACEOUTERBOUND(#2517,.T.); +#2519=IFCFACE((#2518)); +#2520=IFCPOLYLOOP((#492,#419,#513)); +#2521=IFCFACEOUTERBOUND(#2520,.T.); +#2522=IFCFACE((#2521)); +#2523=IFCPOLYLOOP((#537,#435,#532)); +#2524=IFCFACEOUTERBOUND(#2523,.T.); +#2525=IFCFACE((#2524)); +#2526=IFCPOLYLOOP((#597,#483,#723)); +#2527=IFCFACEOUTERBOUND(#2526,.T.); +#2528=IFCFACE((#2527)); +#2529=IFCPOLYLOOP((#774,#772,#771)); +#2530=IFCFACEOUTERBOUND(#2529,.T.); +#2531=IFCFACE((#2530)); +#2532=IFCPOLYLOOP((#410,#507,#413)); +#2533=IFCFACEOUTERBOUND(#2532,.T.); +#2534=IFCFACE((#2533)); +#2535=IFCPOLYLOOP((#618,#459,#590)); +#2536=IFCFACEOUTERBOUND(#2535,.T.); +#2537=IFCFACE((#2536)); +#2538=IFCPOLYLOOP((#604,#626,#479)); +#2539=IFCFACEOUTERBOUND(#2538,.T.); +#2540=IFCFACE((#2539)); +#2541=IFCPOLYLOOP((#779,#723,#483)); +#2542=IFCFACEOUTERBOUND(#2541,.T.); +#2543=IFCFACE((#2542)); +#2544=IFCPOLYLOOP((#499,#508,#713)); +#2545=IFCFACEOUTERBOUND(#2544,.T.); +#2546=IFCFACE((#2545)); +#2547=IFCPOLYLOOP((#625,#512,#453)); +#2548=IFCFACEOUTERBOUND(#2547,.T.); +#2549=IFCFACE((#2548)); +#2550=IFCPOLYLOOP((#440,#644,#677)); +#2551=IFCFACEOUTERBOUND(#2550,.T.); +#2552=IFCFACE((#2551)); +#2553=IFCPOLYLOOP((#473,#629,#559)); +#2554=IFCFACEOUTERBOUND(#2553,.T.); +#2555=IFCFACE((#2554)); +#2556=IFCPOLYLOOP((#720,#730,#706)); +#2557=IFCFACEOUTERBOUND(#2556,.T.); +#2558=IFCFACE((#2557)); +#2559=IFCPOLYLOOP((#701,#698,#708)); +#2560=IFCFACEOUTERBOUND(#2559,.T.); +#2561=IFCFACE((#2560)); +#2562=IFCPOLYLOOP((#599,#583,#563)); +#2563=IFCFACEOUTERBOUND(#2562,.T.); +#2564=IFCFACE((#2563)); +#2565=IFCPOLYLOOP((#514,#685,#590)); +#2566=IFCFACEOUTERBOUND(#2565,.T.); +#2567=IFCFACE((#2566)); +#2568=IFCPOLYLOOP((#727,#726,#728)); +#2569=IFCFACEOUTERBOUND(#2568,.T.); +#2570=IFCFACE((#2569)); +#2571=IFCPOLYLOOP((#576,#545,#487)); +#2572=IFCFACEOUTERBOUND(#2571,.T.); +#2573=IFCFACE((#2572)); +#2574=IFCPOLYLOOP((#465,#711,#623)); +#2575=IFCFACEOUTERBOUND(#2574,.T.); +#2576=IFCFACE((#2575)); +#2577=IFCPOLYLOOP((#687,#688,#695)); +#2578=IFCFACEOUTERBOUND(#2577,.T.); +#2579=IFCFACE((#2578)); +#2580=IFCPOLYLOOP((#588,#639,#579)); +#2581=IFCFACEOUTERBOUND(#2580,.T.); +#2582=IFCFACE((#2581)); +#2583=IFCPOLYLOOP((#753,#506,#650)); +#2584=IFCFACEOUTERBOUND(#2583,.T.); +#2585=IFCFACE((#2584)); +#2586=IFCPOLYLOOP((#578,#569,#570)); +#2587=IFCFACEOUTERBOUND(#2586,.T.); +#2588=IFCFACE((#2587)); +#2589=IFCPOLYLOOP((#452,#509,#767)); +#2590=IFCFACEOUTERBOUND(#2589,.T.); +#2591=IFCFACE((#2590)); +#2592=IFCPOLYLOOP((#603,#596,#641)); +#2593=IFCFACEOUTERBOUND(#2592,.T.); +#2594=IFCFACE((#2593)); +#2595=IFCPOLYLOOP((#568,#576,#646)); +#2596=IFCFACEOUTERBOUND(#2595,.T.); +#2597=IFCFACE((#2596)); +#2598=IFCPOLYLOOP((#621,#470,#702)); +#2599=IFCFACEOUTERBOUND(#2598,.T.); +#2600=IFCFACE((#2599)); +#2601=IFCPOLYLOOP((#597,#626,#604)); +#2602=IFCFACEOUTERBOUND(#2601,.T.); +#2603=IFCFACE((#2602)); +#2604=IFCPOLYLOOP((#657,#572,#570)); +#2605=IFCFACEOUTERBOUND(#2604,.T.); +#2606=IFCFACE((#2605)); +#2607=IFCPOLYLOOP((#606,#418,#520)); +#2608=IFCFACEOUTERBOUND(#2607,.T.); +#2609=IFCFACE((#2608)); +#2610=IFCPOLYLOOP((#640,#710,#770)); +#2611=IFCFACEOUTERBOUND(#2610,.T.); +#2612=IFCFACE((#2611)); +#2613=IFCPOLYLOOP((#574,#470,#477)); +#2614=IFCFACEOUTERBOUND(#2613,.T.); +#2615=IFCFACE((#2614)); +#2616=IFCPOLYLOOP((#764,#704,#732)); +#2617=IFCFACEOUTERBOUND(#2616,.T.); +#2618=IFCFACE((#2617)); +#2619=IFCPOLYLOOP((#547,#689,#514)); +#2620=IFCFACEOUTERBOUND(#2619,.T.); +#2621=IFCFACE((#2620)); +#2622=IFCPOLYLOOP((#656,#658,#665)); +#2623=IFCFACEOUTERBOUND(#2622,.T.); +#2624=IFCFACE((#2623)); +#2625=IFCPOLYLOOP((#535,#513,#520)); +#2626=IFCFACEOUTERBOUND(#2625,.T.); +#2627=IFCFACE((#2626)); +#2628=IFCPOLYLOOP((#508,#602,#572)); +#2629=IFCFACEOUTERBOUND(#2628,.T.); +#2630=IFCFACE((#2629)); +#2631=IFCPOLYLOOP((#530,#462,#503)); +#2632=IFCFACEOUTERBOUND(#2631,.T.); +#2633=IFCFACE((#2632)); +#2634=IFCPOLYLOOP((#451,#471,#679)); +#2635=IFCFACEOUTERBOUND(#2634,.T.); +#2636=IFCFACE((#2635)); +#2637=IFCPOLYLOOP((#634,#523,#524)); +#2638=IFCFACEOUTERBOUND(#2637,.T.); +#2639=IFCFACE((#2638)); +#2640=IFCPOLYLOOP((#471,#663,#493)); +#2641=IFCFACEOUTERBOUND(#2640,.T.); +#2642=IFCFACE((#2641)); +#2643=IFCPOLYLOOP((#661,#660,#675)); +#2644=IFCFACEOUTERBOUND(#2643,.T.); +#2645=IFCFACE((#2644)); +#2646=IFCPOLYLOOP((#661,#659,#635)); +#2647=IFCFACEOUTERBOUND(#2646,.T.); +#2648=IFCFACE((#2647)); +#2649=IFCPOLYLOOP((#720,#693,#657)); +#2650=IFCFACEOUTERBOUND(#2649,.T.); +#2651=IFCFACE((#2650)); +#2652=IFCPOLYLOOP((#421,#430,#407)); +#2653=IFCFACEOUTERBOUND(#2652,.T.); +#2654=IFCFACE((#2653)); +#2655=IFCPOLYLOOP((#677,#644,#575)); +#2656=IFCFACEOUTERBOUND(#2655,.T.); +#2657=IFCFACE((#2656)); +#2658=IFCPOLYLOOP((#766,#503,#462)); +#2659=IFCFACEOUTERBOUND(#2658,.T.); +#2660=IFCFACE((#2659)); +#2661=IFCPOLYLOOP((#452,#453,#512)); +#2662=IFCFACEOUTERBOUND(#2661,.T.); +#2663=IFCFACE((#2662)); +#2664=IFCPOLYLOOP((#564,#702,#576)); +#2665=IFCFACEOUTERBOUND(#2664,.T.); +#2666=IFCFACE((#2665)); +#2667=IFCPOLYLOOP((#594,#492,#639)); +#2668=IFCFACEOUTERBOUND(#2667,.T.); +#2669=IFCFACE((#2668)); +#2670=IFCPOLYLOOP((#662,#674,#675)); +#2671=IFCFACEOUTERBOUND(#2670,.T.); +#2672=IFCFACE((#2671)); +#2673=IFCPOLYLOOP((#559,#672,#770)); +#2674=IFCFACEOUTERBOUND(#2673,.T.); +#2675=IFCFACE((#2674)); +#2676=IFCPOLYLOOP((#573,#676,#424)); +#2677=IFCFACEOUTERBOUND(#2676,.T.); +#2678=IFCFACE((#2677)); +#2679=IFCPOLYLOOP((#716,#736,#578)); +#2680=IFCFACEOUTERBOUND(#2679,.T.); +#2681=IFCFACE((#2680)); +#2682=IFCPOLYLOOP((#677,#505,#447)); +#2683=IFCFACEOUTERBOUND(#2682,.T.); +#2684=IFCFACE((#2683)); +#2685=IFCPOLYLOOP((#668,#726,#721)); +#2686=IFCFACEOUTERBOUND(#2685,.T.); +#2687=IFCFACE((#2686)); +#2688=IFCPOLYLOOP((#691,#542,#700)); +#2689=IFCFACEOUTERBOUND(#2688,.T.); +#2690=IFCFACE((#2689)); +#2691=IFCPOLYLOOP((#563,#583,#553)); +#2692=IFCFACEOUTERBOUND(#2691,.T.); +#2693=IFCFACE((#2692)); +#2694=IFCPOLYLOOP((#671,#717,#709)); +#2695=IFCFACEOUTERBOUND(#2694,.T.); +#2696=IFCFACE((#2695)); +#2697=IFCPOLYLOOP((#530,#515,#554)); +#2698=IFCFACEOUTERBOUND(#2697,.T.); +#2699=IFCFACE((#2698)); +#2700=IFCPOLYLOOP((#692,#517,#518)); +#2701=IFCFACEOUTERBOUND(#2700,.T.); +#2702=IFCFACE((#2701)); +#2703=IFCPOLYLOOP((#670,#674,#505)); +#2704=IFCFACEOUTERBOUND(#2703,.T.); +#2705=IFCFACE((#2704)); +#2706=IFCPOLYLOOP((#527,#410,#446)); +#2707=IFCFACEOUTERBOUND(#2706,.T.); +#2708=IFCFACE((#2707)); +#2709=IFCPOLYLOOP((#659,#670,#575)); +#2710=IFCFACEOUTERBOUND(#2709,.T.); +#2711=IFCFACE((#2710)); +#2712=IFCPOLYLOOP((#438,#428,#520)); +#2713=IFCFACEOUTERBOUND(#2712,.T.); +#2714=IFCFACE((#2713)); +#2715=IFCPOLYLOOP((#495,#439,#407)); +#2716=IFCFACEOUTERBOUND(#2715,.T.); +#2717=IFCFACE((#2716)); +#2718=IFCPOLYLOOP((#691,#689,#547)); +#2719=IFCFACEOUTERBOUND(#2718,.T.); +#2720=IFCFACE((#2719)); +#2721=IFCPOLYLOOP((#481,#408,#416)); +#2722=IFCFACEOUTERBOUND(#2721,.T.); +#2723=IFCFACE((#2722)); +#2724=IFCPOLYLOOP((#499,#737,#582)); +#2725=IFCFACEOUTERBOUND(#2724,.T.); +#2726=IFCFACE((#2725)); +#2727=IFCPOLYLOOP((#689,#683,#684)); +#2728=IFCFACEOUTERBOUND(#2727,.T.); +#2729=IFCFACE((#2728)); +#2730=IFCPOLYLOOP((#646,#487,#543)); +#2731=IFCFACEOUTERBOUND(#2730,.T.); +#2732=IFCFACE((#2731)); +#2733=IFCPOLYLOOP((#736,#716,#722)); +#2734=IFCFACEOUTERBOUND(#2733,.T.); +#2735=IFCFACE((#2734)); +#2736=IFCPOLYLOOP((#630,#642,#643)); +#2737=IFCFACEOUTERBOUND(#2736,.T.); +#2738=IFCFACE((#2737)); +#2739=IFCPOLYLOOP((#579,#639,#623)); +#2740=IFCFACEOUTERBOUND(#2739,.T.); +#2741=IFCFACE((#2740)); +#2742=IFCPOLYLOOP((#581,#556,#498)); +#2743=IFCFACEOUTERBOUND(#2742,.T.); +#2744=IFCFACE((#2743)); +#2745=IFCPOLYLOOP((#507,#410,#630)); +#2746=IFCFACEOUTERBOUND(#2745,.T.); +#2747=IFCFACE((#2746)); +#2748=IFCPOLYLOOP((#776,#429,#775)); +#2749=IFCFACEOUTERBOUND(#2748,.T.); +#2750=IFCFACE((#2749)); +#2751=IFCPOLYLOOP((#505,#636,#473)); +#2752=IFCFACEOUTERBOUND(#2751,.T.); +#2753=IFCFACE((#2752)); +#2754=IFCPOLYLOOP((#550,#632,#596)); +#2755=IFCFACEOUTERBOUND(#2754,.T.); +#2756=IFCFACE((#2755)); +#2757=IFCPOLYLOOP((#456,#408,#481)); +#2758=IFCFACEOUTERBOUND(#2757,.T.); +#2759=IFCFACE((#2758)); +#2760=IFCPOLYLOOP((#537,#485,#464)); +#2761=IFCFACEOUTERBOUND(#2760,.T.); +#2762=IFCFACE((#2761)); +#2763=IFCPOLYLOOP((#432,#613,#647)); +#2764=IFCFACEOUTERBOUND(#2763,.T.); +#2765=IFCFACE((#2764)); +#2766=IFCPOLYLOOP((#514,#462,#530)); +#2767=IFCFACEOUTERBOUND(#2766,.T.); +#2768=IFCFACE((#2767)); +#2769=IFCPOLYLOOP((#544,#546,#592)); +#2770=IFCFACEOUTERBOUND(#2769,.T.); +#2771=IFCFACE((#2770)); +#2772=IFCPOLYLOOP((#486,#513,#535)); +#2773=IFCFACEOUTERBOUND(#2772,.T.); +#2774=IFCFACE((#2773)); +#2775=IFCPOLYLOOP((#513,#419,#455)); +#2776=IFCFACEOUTERBOUND(#2775,.T.); +#2777=IFCFACE((#2776)); +#2778=IFCPOLYLOOP((#614,#555,#433)); +#2779=IFCFACEOUTERBOUND(#2778,.T.); +#2780=IFCFACE((#2779)); +#2781=IFCPOLYLOOP((#449,#422,#434)); +#2782=IFCFACEOUTERBOUND(#2781,.T.); +#2783=IFCFACE((#2782)); +#2784=IFCPOLYLOOP((#608,#599,#600)); +#2785=IFCFACEOUTERBOUND(#2784,.T.); +#2786=IFCFACE((#2785)); +#2787=IFCPOLYLOOP((#633,#634,#642)); +#2788=IFCFACEOUTERBOUND(#2787,.T.); +#2789=IFCFACE((#2788)); +#2790=IFCPOLYLOOP((#565,#491,#621)); +#2791=IFCFACEOUTERBOUND(#2790,.T.); +#2792=IFCFACE((#2791)); +#2793=IFCPOLYLOOP((#709,#717,#668)); +#2794=IFCFACEOUTERBOUND(#2793,.T.); +#2795=IFCFACE((#2794)); +#2796=IFCPOLYLOOP((#488,#480,#464)); +#2797=IFCFACEOUTERBOUND(#2796,.T.); +#2798=IFCFACE((#2797)); +#2799=IFCPOLYLOOP((#589,#598,#594)); +#2800=IFCFACEOUTERBOUND(#2799,.T.); +#2801=IFCFACE((#2800)); +#2802=IFCPOLYLOOP((#409,#405,#537)); +#2803=IFCFACEOUTERBOUND(#2802,.T.); +#2804=IFCFACE((#2803)); +#2805=IFCPOLYLOOP((#630,#450,#641)); +#2806=IFCFACEOUTERBOUND(#2805,.T.); +#2807=IFCFACE((#2806)); +#2808=IFCPOLYLOOP((#427,#413,#681)); +#2809=IFCFACEOUTERBOUND(#2808,.T.); +#2810=IFCFACE((#2809)); +#2811=IFCPOLYLOOP((#480,#488,#412)); +#2812=IFCFACEOUTERBOUND(#2811,.T.); +#2813=IFCFACE((#2812)); +#2814=IFCPOLYLOOP((#698,#671,#678)); +#2815=IFCFACEOUTERBOUND(#2814,.T.); +#2816=IFCFACE((#2815)); +#2817=IFCPOLYLOOP((#549,#548,#518)); +#2818=IFCFACEOUTERBOUND(#2817,.T.); +#2819=IFCFACE((#2818)); +#2820=IFCPOLYLOOP((#445,#419,#607)); +#2821=IFCFACEOUTERBOUND(#2820,.T.); +#2822=IFCFACE((#2821)); +#2823=IFCPOLYLOOP((#417,#415,#447)); +#2824=IFCFACEOUTERBOUND(#2823,.T.); +#2825=IFCFACE((#2824)); +#2826=IFCPOLYLOOP((#638,#547,#529)); +#2827=IFCFACEOUTERBOUND(#2826,.T.); +#2828=IFCFACE((#2827)); +#2829=IFCPOLYLOOP((#444,#420,#442)); +#2830=IFCFACEOUTERBOUND(#2829,.T.); +#2831=IFCFACE((#2830)); +#2832=IFCPOLYLOOP((#676,#445,#489)); +#2833=IFCFACEOUTERBOUND(#2832,.T.); +#2834=IFCFACE((#2833)); +#2835=IFCPOLYLOOP((#619,#453,#452)); +#2836=IFCFACEOUTERBOUND(#2835,.T.); +#2837=IFCFACE((#2836)); +#2838=IFCPOLYLOOP((#443,#541,#645)); +#2839=IFCFACEOUTERBOUND(#2838,.T.); +#2840=IFCFACE((#2839)); +#2841=IFCPOLYLOOP((#715,#678,#696)); +#2842=IFCFACEOUTERBOUND(#2841,.T.); +#2843=IFCFACE((#2842)); +#2844=IFCPOLYLOOP((#473,#655,#490)); +#2845=IFCFACEOUTERBOUND(#2844,.T.); +#2846=IFCFACE((#2845)); +#2847=IFCPOLYLOOP((#714,#491,#565)); +#2848=IFCFACEOUTERBOUND(#2847,.T.); +#2849=IFCFACE((#2848)); +#2850=IFCPOLYLOOP((#652,#660,#654)); +#2851=IFCFACEOUTERBOUND(#2850,.T.); +#2852=IFCFACE((#2851)); +#2853=IFCPOLYLOOP((#472,#482,#421)); +#2854=IFCFACEOUTERBOUND(#2853,.T.); +#2855=IFCFACE((#2854)); +#2856=IFCPOLYLOOP((#560,#635,#575)); +#2857=IFCFACEOUTERBOUND(#2856,.T.); +#2858=IFCFACE((#2857)); +#2859=IFCPOLYLOOP((#463,#431,#412)); +#2860=IFCFACEOUTERBOUND(#2859,.T.); +#2861=IFCFACE((#2860)); +#2862=IFCPOLYLOOP((#458,#437,#775)); +#2863=IFCFACEOUTERBOUND(#2862,.T.); +#2864=IFCFACE((#2863)); +#2865=IFCPOLYLOOP((#641,#596,#632)); +#2866=IFCFACEOUTERBOUND(#2865,.T.); +#2867=IFCFACE((#2866)); +#2868=IFCPOLYLOOP((#766,#767,#509)); +#2869=IFCFACEOUTERBOUND(#2868,.T.); +#2870=IFCFACE((#2869)); +#2871=IFCPOLYLOOP((#695,#697,#718)); +#2872=IFCFACEOUTERBOUND(#2871,.T.); +#2873=IFCFACE((#2872)); +#2874=IFCPOLYLOOP((#449,#516,#474)); +#2875=IFCFACEOUTERBOUND(#2874,.T.); +#2876=IFCFACE((#2875)); +#2877=IFCPOLYLOOP((#466,#444,#467)); +#2878=IFCFACEOUTERBOUND(#2877,.T.); +#2879=IFCFACE((#2878)); +#2880=IFCPOLYLOOP((#495,#435,#423)); +#2881=IFCFACEOUTERBOUND(#2880,.T.); +#2882=IFCFACE((#2881)); +#2883=IFCPOLYLOOP((#673,#674,#664)); +#2884=IFCFACEOUTERBOUND(#2883,.T.); +#2885=IFCFACE((#2884)); +#2886=IFCPOLYLOOP((#457,#407,#439)); +#2887=IFCFACEOUTERBOUND(#2886,.T.); +#2888=IFCFACE((#2887)); +#2889=IFCPOLYLOOP((#471,#451,#591)); +#2890=IFCFACEOUTERBOUND(#2889,.T.); +#2891=IFCFACE((#2890)); +#2892=IFCPOLYLOOP((#539,#477,#470)); +#2893=IFCFACEOUTERBOUND(#2892,.T.); +#2894=IFCFACE((#2893)); +#2895=IFCPOLYLOOP((#737,#733,#734)); +#2896=IFCFACEOUTERBOUND(#2895,.T.); +#2897=IFCFACE((#2896)); +#2898=IFCPOLYLOOP((#719,#665,#658)); +#2899=IFCFACEOUTERBOUND(#2898,.T.); +#2900=IFCFACE((#2899)); +#2901=IFCPOLYLOOP((#531,#427,#416)); +#2902=IFCFACEOUTERBOUND(#2901,.T.); +#2903=IFCFACE((#2902)); +#2904=IFCPOLYLOOP((#504,#525,#532)); +#2905=IFCFACEOUTERBOUND(#2904,.T.); +#2906=IFCFACE((#2905)); +#2907=IFCPOLYLOOP((#723,#779,#409)); +#2908=IFCFACEOUTERBOUND(#2907,.T.); +#2909=IFCFACE((#2908)); +#2910=IFCPOLYLOOP((#778,#487,#562)); +#2911=IFCFACEOUTERBOUND(#2910,.T.); +#2912=IFCFACE((#2911)); +#2913=IFCPOLYLOOP((#779,#543,#487)); +#2914=IFCFACEOUTERBOUND(#2913,.T.); +#2915=IFCFACE((#2914)); +#2916=IFCPOLYLOOP((#718,#697,#678)); +#2917=IFCFACEOUTERBOUND(#2916,.T.); +#2918=IFCFACE((#2917)); +#2919=IFCCLOSEDSHELL((#782,#785,#788,#791,#794,#797,#800,#803,#806,#809,#812,#815,#818,#821,#824,#827,#830,#833,#836,#839,#842,#845,#848,#851,#854,#857,#860,#863,#866,#869,#872,#875,#878,#881,#884,#887,#890,#893,#896,#899,#902,#905,#908,#911,#914,#917,#920,#923,#926,#929,#932,#935,#938,#941,#944,#947,#950,#953,#956,#959,#962,#965,#968,#971,#974,#977,#980,#983,#986,#989,#992,#995,#998,#1001,#1004,#1007,#1010,#1013,#1016,#1019,#1022,#1025,#1028,#1031,#1034,#1037,#1040,#1043,#1046,#1049,#1052,#1055,#1058,#1061,#1064,#1067,#1070,#1073,#1076,#1079,#1082,#1085,#1088,#1091,#1094,#1097,#1100,#1103,#1106,#1109,#1112,#1115,#1118,#1121,#1124,#1127,#1130,#1133,#1136,#1139,#1142,#1145,#1148,#1151,#1154,#1157,#1160,#1163,#1166,#1169,#1172,#1175,#1178,#1181,#1184,#1187,#1190,#1193,#1196,#1199,#1202,#1205,#1208,#1211,#1214,#1217,#1220,#1223,#1226,#1229,#1232,#1235,#1238,#1241,#1244,#1247,#1250,#1253,#1256,#1259,#1262,#1265,#1268,#1271,#1274,#1277,#1280,#1283,#1286,#1289,#1292,#1295,#1298,#1301,#1304,#1307,#1310,#1313,#1316,#1319,#1322,#1325,#1328,#1331,#1334,#1337,#1340,#1343,#1346,#1349,#1352,#1355,#1358,#1361,#1364,#1367,#1370,#1373,#1376,#1379,#1382,#1385,#1388,#1391,#1394,#1397,#1400,#1403,#1406,#1409,#1412,#1415,#1418,#1421,#1424,#1427,#1430,#1433,#1436,#1439,#1442,#1445,#1448,#1451,#1454,#1457,#1460,#1463,#1466,#1469,#1472,#1475,#1478,#1481,#1484,#1487,#1490,#1493,#1496,#1499,#1502,#1505,#1508,#1511,#1514,#1517,#1520,#1523,#1526,#1529,#1532,#1535,#1538,#1541,#1544,#1547,#1550,#1553,#1556,#1559,#1562,#1565,#1568,#1571,#1574,#1577,#1580,#1583,#1586,#1589,#1592,#1595,#1598,#1601,#1604,#1607,#1610,#1613,#1616,#1619,#1622,#1625,#1628,#1631,#1634,#1637,#1640,#1643,#1646,#1649,#1652,#1655,#1658,#1661,#1664,#1667,#1670,#1673,#1676,#1679,#1682,#1685,#1688,#1691,#1694,#1697,#1700,#1703,#1706,#1709,#1712,#1715,#1718,#1721,#1724,#1727,#1730,#1733,#1736,#1739,#1742,#1745,#1748,#1751,#1754,#1757,#1760,#1763,#1766,#1769,#1772,#1775,#1778,#1781,#1784,#1787,#1790,#1793,#1796,#1799,#1802,#1805,#1808,#1811,#1814,#1817,#1820,#1823,#1826,#1829,#1832,#1835,#1838,#1841,#1844,#1847,#1850,#1853,#1856,#1859,#1862,#1865,#1868,#1871,#1874,#1877,#1880,#1883,#1886,#1889,#1892,#1895,#1898,#1901,#1904,#1907,#1910,#1913,#1916,#1919,#1922,#1925,#1928,#1931,#1934,#1937,#1940,#1943,#1946,#1949,#1952,#1955,#1958,#1961,#1964,#1967,#1970,#1973,#1976,#1979,#1982,#1985,#1988,#1991,#1994,#1997,#2000,#2003,#2006,#2009,#2012,#2015,#2018,#2021,#2024,#2027,#2030,#2033,#2036,#2039,#2042,#2045,#2048,#2051,#2054,#2057,#2060,#2063,#2066,#2069,#2072,#2075,#2078,#2081,#2084,#2087,#2090,#2093,#2096,#2099,#2102,#2105,#2108,#2111,#2114,#2117,#2120,#2123,#2126,#2129,#2132,#2135,#2138,#2141,#2144,#2147,#2150,#2153,#2156,#2159,#2162,#2165,#2168,#2171,#2174,#2177,#2180,#2183,#2186,#2189,#2192,#2195,#2198,#2201,#2204,#2207,#2210,#2213,#2216,#2219,#2222,#2225,#2228,#2231,#2234,#2237,#2240,#2243,#2246,#2249,#2252,#2255,#2258,#2261,#2264,#2267,#2270,#2273,#2276,#2279,#2282,#2285,#2288,#2291,#2294,#2297,#2300,#2303,#2306,#2309,#2312,#2315,#2318,#2321,#2324,#2327,#2330,#2333,#2336,#2339,#2342,#2345,#2348,#2351,#2354,#2357,#2360,#2363,#2366,#2369,#2372,#2375,#2378,#2381,#2384,#2387,#2390,#2393,#2396,#2399,#2402,#2405,#2408,#2411,#2414,#2417,#2420,#2423,#2426,#2429,#2432,#2435,#2438,#2441,#2444,#2447,#2450,#2453,#2456,#2459,#2462,#2465,#2468,#2471,#2474,#2477,#2480,#2483,#2486,#2489,#2492,#2495,#2498,#2501,#2504,#2507,#2510,#2513,#2516,#2519,#2522,#2525,#2528,#2531,#2534,#2537,#2540,#2543,#2546,#2549,#2552,#2555,#2558,#2561,#2564,#2567,#2570,#2573,#2576,#2579,#2582,#2585,#2588,#2591,#2594,#2597,#2600,#2603,#2606,#2609,#2612,#2615,#2618,#2621,#2624,#2627,#2630,#2633,#2636,#2639,#2642,#2645,#2648,#2651,#2654,#2657,#2660,#2663,#2666,#2669,#2672,#2675,#2678,#2681,#2684,#2687,#2690,#2693,#2696,#2699,#2702,#2705,#2708,#2711,#2714,#2717,#2720,#2723,#2726,#2729,#2732,#2735,#2738,#2741,#2744,#2747,#2750,#2753,#2756,#2759,#2762,#2765,#2768,#2771,#2774,#2777,#2780,#2783,#2786,#2789,#2792,#2795,#2798,#2801,#2804,#2807,#2810,#2813,#2816,#2819,#2822,#2825,#2828,#2831,#2834,#2837,#2840,#2843,#2846,#2849,#2852,#2855,#2858,#2861,#2864,#2867,#2870,#2873,#2876,#2879,#2882,#2885,#2888,#2891,#2894,#2897,#2900,#2903,#2906,#2909,#2912,#2915,#2918)); +#2920=IFCFACETEDBREP(#2919); +#2921=IFCSHAPEREPRESENTATION(#23,'Body','Brep',(#2920)); +#2922=IFCCARTESIANPOINT((0.,0.,0.)); +#2923=IFCDIRECTION((1.,0.,0.)); +#2924=IFCDIRECTION((0.,0.,1.)); +#2925=IFCAXIS2PLACEMENT3D(#2922,#2924,#2923); +#2926=IFCREPRESENTATIONMAP(#2925,#2921); +#2927=IFCCARTESIANPOINT((-0.161386370658875,0.000390071421861649)); +#2928=IFCCARTESIANPOINT((-0.16297847032547,0.0306398719549179)); +#2929=IFCCARTESIANPOINT((-0.152914509177208,0.0576198659837246)); +#2930=IFCCARTESIANPOINT((-0.148716494441032,0.0795774236321449)); +#2931=IFCCARTESIANPOINT((-0.149392008781433,0.102066904306412)); +#2932=IFCCARTESIANPOINT((-0.15144681930542,0.125798091292381)); +#2933=IFCCARTESIANPOINT((-0.157580137252808,0.132616892457008)); +#2934=IFCCARTESIANPOINT((-0.169090509414673,0.130419373512268)); +#2935=IFCCARTESIANPOINT((-0.180844187736511,0.118465758860111)); +#2936=IFCCARTESIANPOINT((-0.182052731513977,0.0906300097703934)); +#2937=IFCCARTESIANPOINT((-0.183831930160522,0.0552833341062069)); +#2938=IFCCARTESIANPOINT((-0.183684945106506,0.0396271869540215)); +#2939=IFCCARTESIANPOINT((-0.192724362015724,-0.00467484071850777)); +#2940=IFCPOLYLINE((#2927,#2928,#2929,#2930,#2931,#2932,#2933,#2934,#2935,#2936,#2937,#2938,#2939)); +#2941=IFCCARTESIANPOINT((-0.173348978161812,0.0203548446297646)); +#2942=IFCCARTESIANPOINT((-0.16315957903862,0.0617493018507957)); +#2943=IFCCARTESIANPOINT((-0.157428041100502,0.0974122136831284)); +#2944=IFCCARTESIANPOINT((-0.165070101618767,0.119064696133137)); +#2945=IFCPOLYLINE((#2941,#2942,#2943,#2944)); +#2946=IFCCARTESIANPOINT((-0.160456106066704,0.03740194439888)); +#2947=IFCCARTESIANPOINT((-0.130220890045166,0.0479081235826015)); +#2948=IFCCARTESIANPOINT((-0.0977480411529541,0.0540151223540306)); +#2949=IFCCARTESIANPOINT((-0.074405312538147,0.0735662579536438)); +#2950=IFCCARTESIANPOINT((-0.0373027324676514,0.0895451977849007)); +#2951=IFCCARTESIANPOINT((-0.00524431467056274,0.0854801684617996)); +#2952=IFCCARTESIANPOINT((0.0449999570846558,0.0689153224229813)); +#2953=IFCCARTESIANPOINT((0.0768988728523254,0.0420413166284561)); +#2954=IFCCARTESIANPOINT((0.100000023841858,0.0200000032782555)); +#2955=IFCCARTESIANPOINT((0.112531423568726,-0.0134119689464569)); +#2956=IFCCARTESIANPOINT((0.11093932390213,-0.0415389761328697)); +#2957=IFCCARTESIANPOINT((0.101917445659637,-0.0744422599673271)); +#2958=IFCCARTESIANPOINT((0.128680348396301,-0.0638554915785789)); +#2959=IFCCARTESIANPOINT((0.138488471508026,-0.0432419404387474)); +#2960=IFCCARTESIANPOINT((0.134837985038757,-0.0135693177580833)); +#2961=IFCCARTESIANPOINT((0.123972177505493,0.00519884377717972)); +#2962=IFCCARTESIANPOINT((0.100000023841858,0.0200000032782555)); +#2963=IFCPOLYLINE((#2946,#2947,#2948,#2949,#2950,#2951,#2952,#2953,#2954,#2955,#2956,#2957,#2958,#2959,#2960,#2961,#2962)); +#2964=IFCCARTESIANPOINT((-0.0413289070129395,0.0605994611978531)); +#2965=IFCCARTESIANPOINT((-0.0554808378219604,0.0468897596001625)); +#2966=IFCCARTESIANPOINT((-0.0780355930328369,0.0367180481553078)); +#2967=IFCCARTESIANPOINT((-0.0992635488510132,0.0185858532786369)); +#2968=IFCCARTESIANPOINT((-0.136412382125854,0.00443390011787415)); +#2969=IFCPOLYLINE((#2964,#2965,#2966,#2967,#2968)); +#2970=IFCCARTESIANPOINT((-0.14391028881073,0.00847188383340836)); +#2971=IFCCARTESIANPOINT((-0.127020835876465,0.0233357548713684)); +#2972=IFCCARTESIANPOINT((-0.0995742082595825,0.049370177090168)); +#2973=IFCCARTESIANPOINT((-0.0685850381851196,0.0688069462776184)); +#2974=IFCCARTESIANPOINT((-0.0296431183815002,0.0763391554355621)); +#2975=IFCCARTESIANPOINT((-0.0267347097396851,0.07121342420578)); +#2976=IFCCARTESIANPOINT((-0.0338107347488403,0.0583882182836533)); +#2977=IFCCARTESIANPOINT((-0.0585765838623047,0.0190281048417091)); +#2978=IFCCARTESIANPOINT((-0.103685975074768,-0.00794906169176102)); +#2979=IFCCARTESIANPOINT((-0.130663156509399,-0.0145827829837799)); +#2980=IFCPOLYLINE((#2970,#2971,#2972,#2973,#2974,#2975,#2976,#2977,#2978,#2979)); +#2981=IFCCARTESIANPOINT((0.101917445659637,-0.0744422599673271)); +#2982=IFCCARTESIANPOINT((0.0776327848434448,-0.0989715680480003)); +#2983=IFCCARTESIANPOINT((0.0435214042663574,-0.123003117740154)); +#2984=IFCCARTESIANPOINT((-0.00187504291534424,-0.136098772287369)); +#2985=IFCCARTESIANPOINT((-0.0447412729263306,-0.130966305732727)); +#2986=IFCCARTESIANPOINT((-0.0755681991577148,-0.105624251067638)); +#2987=IFCCARTESIANPOINT((-0.114447318017483,-0.103237792849541)); +#2988=IFCCARTESIANPOINT((-0.148344993591309,-0.102713964879513)); +#2989=IFCCARTESIANPOINT((-0.129387378692627,-0.0837726220488548)); +#2990=IFCCARTESIANPOINT((-0.112089991569519,-0.0523208752274513)); +#2991=IFCPOLYLINE((#2981,#2982,#2983,#2984,#2985,#2986,#2987,#2988,#2989,#2990)); +#2992=IFCCARTESIANPOINT((-0.148344993591309,-0.102713964879513)); +#2993=IFCCARTESIANPOINT((-0.16057014465332,-0.11072414368391)); +#2994=IFCCARTESIANPOINT((-0.187541648745537,-0.117346309125423)); +#2995=IFCCARTESIANPOINT((-0.205768346786499,-0.106695257127285)); +#2996=IFCCARTESIANPOINT((-0.214284062385559,-0.0905132815241814)); +#2997=IFCCARTESIANPOINT((-0.222012758255005,-0.0435851588845253)); +#2998=IFCCARTESIANPOINT((-0.217635273933411,-0.0236888602375984)); +#2999=IFCCARTESIANPOINT((-0.189349979162216,0.0118629187345505)); +#3000=IFCPOLYLINE((#2992,#2993,#2994,#2995,#2996,#2997,#2998,#2999)); +#3001=IFCGEOMETRICCURVESET((#2940,#2945,#2963,#2969,#2980,#2991,#3000)); +#3002=IFCSHAPEREPRESENTATION(#24,'Body','Annotation2D',(#3001)); +#3003=IFCCARTESIANPOINT((0.,0.,0.)); +#3004=IFCDIRECTION((1.,0.,0.)); +#3005=IFCDIRECTION((0.,0.,1.)); +#3006=IFCAXIS2PLACEMENT3D(#3003,#3005,#3004); +#3007=IFCREPRESENTATIONMAP(#3006,#3002); +#3008=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3009=IFCTYPEPRODUCT('0UrP0fLdD5OwzwD41aRKao',#3008,'SETOUT-POINT',$,'IfcAnnotation/SYMBOL',(#3011),$,$); +#3010=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3011=IFCPROPERTYSET('27lmSbeAXC08EWkEq8XdUG',#3010,'EPset_Annotation',$,(#3012)); +#3012=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('setout-point'),$); +#3013=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3014=IFCTYPEPRODUCT('3IQrQOSFP0WfkuLk0ak7_0',#3013,'CONTROL-POINT',$,'IfcAnnotation/SYMBOL',(#3016),$,$); +#3015=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3016=IFCPROPERTYSET('23aN9DsdjFcfWq8KGSIVoN',#3015,'EPset_Annotation',$,(#3017)); +#3017=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('control-point'),$); +#3018=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3019=IFCTYPEPRODUCT('3wvbaiaIz8agQgDRzt01vz',#3018,'TRAVERSE-POINT',$,'IfcAnnotation/SYMBOL',(#3021),$,$); +#3020=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3021=IFCPROPERTYSET('1j7aFM1Rb9BRuKgUEn1U10',#3020,'EPset_Annotation',$,(#3022)); +#3022=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('traverse-point'),$); +#3023=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3024=IFCTYPEPRODUCT('0p5ZTfTnX9ZOywroa7Ffql',#3023,'DASHED',$,'IfcAnnotation/LINEWORK',(#3026),$,$); +#3025=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3026=IFCPROPERTYSET('27smSHyiv39vhBRSwfDVCD',#3025,'EPset_Annotation',$,(#3027)); +#3027=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('dashed'),$); +#3028=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3029=IFCTYPEPRODUCT('2EvrG9Vuf6t9etgMeWFuJ2',#3028,'FINE',$,'IfcAnnotation/LINEWORK',(#3031),$,$); +#3030=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3031=IFCPROPERTYSET('0gVTuDcZ5ByRdR3sZnEZUR',#3030,'EPset_Annotation',$,(#3032)); +#3032=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('fine'),$); +#3033=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3034=IFCTYPEPRODUCT('0IeM1ywXn1qhR_6NhB6N4s',#3033,'THIN',$,'IfcAnnotation/LINEWORK',(#3036),$,$); +#3035=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3036=IFCPROPERTYSET('0t6c$uCeT9092GYkbm8hDS',#3035,'EPset_Annotation',$,(#3037)); +#3037=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('thin'),$); +#3038=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3039=IFCTYPEPRODUCT('1jZVbCwrTCGhZdKbH4uqTP',#3038,'MEDIUM',$,'IfcAnnotation/LINEWORK',(#3041),$,$); +#3040=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3041=IFCPROPERTYSET('2uTJ11lF98GeN8pPIf340N',#3040,'EPset_Annotation',$,(#3042)); +#3042=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('medium'),$); +#3043=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3044=IFCTYPEPRODUCT('38zW9E1uH2ae$zat9KrieS',#3043,'THICK',$,'IfcAnnotation/LINEWORK',(#3046),$,$); +#3045=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3046=IFCPROPERTYSET('2XQxgO16v9vxjvuIJpaPpG',#3045,'EPset_Annotation',$,(#3047)); +#3047=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('thick'),$); +#3048=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3049=IFCTYPEPRODUCT('3G2s7ZLzfDJh5J$2iIzHw9',#3048,'STRONG',$,'IfcAnnotation/LINEWORK',(#3051),$,$); +#3050=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3051=IFCPROPERTYSET('0TcB8Gal96vebTrLWa5CEw',#3050,'EPset_Annotation',$,(#3052)); +#3052=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('strong'),$); +#3053=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1743078627,#3,#7,1743078627); +#3054=IFCTYPEPRODUCT('3pq2B$0k52ZOv2bFuRYkxO',#3053,'SETOUT-TAG',$,'IfcAnnotation/TEXT',(#3056),(#3075),$); +#3055=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3056=IFCPROPERTYSET('39$oNFI052cBhtpZCVVLfj',#3055,'EPset_Annotation',$,(#3057)); +#3057=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('setout-tag'),$); +#3058=IFCCARTESIANPOINT((0.,0.,0.)); +#3059=IFCDIRECTION((0.,0.,1.)); +#3060=IFCDIRECTION((1.,0.,0.)); +#3061=IFCAXIS2PLACEMENT3D(#3058,#3059,#3060); +#3062=IFCPLANAREXTENT(1000.,1000.); +#3063=IFCTEXTLITERALWITHEXTENT('E ``round({{easting}}, 0.001)``',#3061,.RIGHT.,#3062,'center'); +#3064=IFCCARTESIANPOINT((0.,0.,0.)); +#3065=IFCDIRECTION((0.,0.,1.)); +#3066=IFCDIRECTION((1.,0.,0.)); +#3067=IFCAXIS2PLACEMENT3D(#3064,#3065,#3066); +#3068=IFCPLANAREXTENT(1000.,1000.); +#3069=IFCTEXTLITERALWITHEXTENT('N ``round({{northing}}, 0.001)``',#3067,.RIGHT.,#3068,'center'); +#3070=IFCSHAPEREPRESENTATION(#25,'Annotation','Annotation2D',(#3063,#3069)); +#3071=IFCCARTESIANPOINT((0.,0.,0.)); +#3072=IFCDIRECTION((1.,0.,0.)); +#3073=IFCDIRECTION((0.,0.,1.)); +#3074=IFCAXIS2PLACEMENT3D(#3071,#3073,#3072); +#3075=IFCREPRESENTATIONMAP(#3074,#3070); +#3076=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1743078627,#3,#7,1743078627); +#3077=IFCTYPEPRODUCT('11M3ahhrr9NBdB29YEazzw',#3076,'DOOR-TAG',$,'IfcAnnotation/TEXT',(#3079),(#3098),$); +#3078=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3079=IFCPROPERTYSET('3xUNoLKPT9kB4LMdoctm5k',#3078,'EPset_Annotation',$,(#3080)); +#3080=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('door-tag'),$); +#3081=IFCCARTESIANPOINT((0.,0.,0.)); +#3082=IFCDIRECTION((0.,0.,1.)); +#3083=IFCDIRECTION((1.,0.,0.)); +#3084=IFCAXIS2PLACEMENT3D(#3081,#3082,#3083); +#3085=IFCPLANAREXTENT(1000.,1000.); +#3086=IFCTEXTLITERALWITHEXTENT('{{type.Name}}',#3084,.RIGHT.,#3085,'center'); +#3087=IFCCARTESIANPOINT((0.,0.,0.)); +#3088=IFCDIRECTION((0.,0.,1.)); +#3089=IFCDIRECTION((1.,0.,0.)); +#3090=IFCAXIS2PLACEMENT3D(#3087,#3088,#3089); +#3091=IFCPLANAREXTENT(1000.,1000.); +#3092=IFCTEXTLITERALWITHEXTENT('{{Name}}',#3090,.RIGHT.,#3091,'center'); +#3093=IFCSHAPEREPRESENTATION(#25,'Annotation','Annotation2D',(#3086,#3092)); +#3094=IFCCARTESIANPOINT((0.,0.,0.)); +#3095=IFCDIRECTION((1.,0.,0.)); +#3096=IFCDIRECTION((0.,0.,1.)); +#3097=IFCAXIS2PLACEMENT3D(#3094,#3096,#3095); +#3098=IFCREPRESENTATIONMAP(#3097,#3093); +#3099=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1743078627,#3,#7,1743078627); +#3100=IFCTYPEPRODUCT('1eE8Y$BVDFDgG8Fj6d9wiV',#3099,'WINDOW-TAG',$,'IfcAnnotation/TEXT',(#3102),(#3115),$); +#3101=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3102=IFCPROPERTYSET('2MqzSGkXDBcPSolaAQvYO4',#3101,'EPset_Annotation',$,(#3103)); +#3103=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('window-tag'),$); +#3104=IFCCARTESIANPOINT((0.,0.,0.)); +#3105=IFCDIRECTION((0.,0.,1.)); +#3106=IFCDIRECTION((1.,0.,0.)); +#3107=IFCAXIS2PLACEMENT3D(#3104,#3105,#3106); +#3108=IFCPLANAREXTENT(1000.,1000.); +#3109=IFCTEXTLITERALWITHEXTENT('{{Name}}',#3107,.RIGHT.,#3108,'center'); +#3110=IFCSHAPEREPRESENTATION(#25,'Annotation','Annotation2D',(#3109)); +#3111=IFCCARTESIANPOINT((0.,0.,0.)); +#3112=IFCDIRECTION((1.,0.,0.)); +#3113=IFCDIRECTION((0.,0.,1.)); +#3114=IFCAXIS2PLACEMENT3D(#3111,#3113,#3112); +#3115=IFCREPRESENTATIONMAP(#3114,#3110); +#3116=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1743078627,#3,#7,1743078627); +#3117=IFCTYPEPRODUCT('0vvfHSiaPBxewA$32C4LdW',#3116,'SPACE-TAG',$,'IfcAnnotation/TEXT',(#3119),(#3144),$); +#3118=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3119=IFCPROPERTYSET('2zKuFdTPj3DhNdQ0U2kd5u',#3118,'EPset_Annotation',$,(#3120)); +#3120=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('space-tag'),$); +#3121=IFCCARTESIANPOINT((0.,0.,0.)); +#3122=IFCDIRECTION((0.,0.,1.)); +#3123=IFCDIRECTION((1.,0.,0.)); +#3124=IFCAXIS2PLACEMENT3D(#3121,#3122,#3123); +#3125=IFCPLANAREXTENT(1000.,1000.); +#3126=IFCTEXTLITERALWITHEXTENT('{{Name}}',#3124,.RIGHT.,#3125,'center'); +#3127=IFCCARTESIANPOINT((0.,0.,0.)); +#3128=IFCDIRECTION((0.,0.,1.)); +#3129=IFCDIRECTION((1.,0.,0.)); +#3130=IFCAXIS2PLACEMENT3D(#3127,#3128,#3129); +#3131=IFCPLANAREXTENT(1000.,1000.); +#3132=IFCTEXTLITERALWITHEXTENT('{{Description}}',#3130,.RIGHT.,#3131,'center'); +#3133=IFCCARTESIANPOINT((0.,0.,0.)); +#3134=IFCDIRECTION((0.,0.,1.)); +#3135=IFCDIRECTION((1.,0.,0.)); +#3136=IFCAXIS2PLACEMENT3D(#3133,#3134,#3135); +#3137=IFCPLANAREXTENT(1000.,1000.); +#3138=IFCTEXTLITERALWITHEXTENT('``round({{Qto_SpaceBaseQuantities.NetFloorArea}}, 0.01)``',#3136,.RIGHT.,#3137,'center'); +#3139=IFCSHAPEREPRESENTATION(#25,'Annotation','Annotation2D',(#3126,#3132,#3138)); +#3140=IFCCARTESIANPOINT((0.,0.,0.)); +#3141=IFCDIRECTION((1.,0.,0.)); +#3142=IFCDIRECTION((0.,0.,1.)); +#3143=IFCAXIS2PLACEMENT3D(#3140,#3142,#3141); +#3144=IFCREPRESENTATIONMAP(#3143,#3139); +#3145=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1743078627,#3,#7,1743078627); +#3146=IFCTYPEPRODUCT('36lTcd9yT8UBNDejQUNWrq',#3145,'MATERIAL-TAG',$,'IfcAnnotation/TEXT',(#3148),(#3161),$); +#3147=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3148=IFCPROPERTYSET('1x86VNVk1Drwe5XOj$GZX3',#3147,'EPset_Annotation',$,(#3149)); +#3149=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('rectangle-tag'),$); +#3150=IFCCARTESIANPOINT((0.,0.,0.)); +#3151=IFCDIRECTION((0.,0.,1.)); +#3152=IFCDIRECTION((1.,0.,0.)); +#3153=IFCAXIS2PLACEMENT3D(#3150,#3151,#3152); +#3154=IFCPLANAREXTENT(1000.,1000.); +#3155=IFCTEXTLITERALWITHEXTENT('{{material.Name}}',#3153,.RIGHT.,#3154,'center'); +#3156=IFCSHAPEREPRESENTATION(#25,'Annotation','Annotation2D',(#3155)); +#3157=IFCCARTESIANPOINT((0.,0.,0.)); +#3158=IFCDIRECTION((1.,0.,0.)); +#3159=IFCDIRECTION((0.,0.,1.)); +#3160=IFCAXIS2PLACEMENT3D(#3157,#3159,#3158); +#3161=IFCREPRESENTATIONMAP(#3160,#3156); +#3162=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1743078627,#3,#7,1743078627); +#3163=IFCTYPEPRODUCT('1rxhEX6I16oPqglXaGZ7Sw',#3162,'TYPE-TAG',$,'IfcAnnotation/TEXT',(#3165),(#3178),$); +#3164=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3165=IFCPROPERTYSET('3BeqEbDzX0xORamqqSx_kZ',#3164,'EPset_Annotation',$,(#3166)); +#3166=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('capsule-tag'),$); +#3167=IFCCARTESIANPOINT((0.,0.,0.)); +#3168=IFCDIRECTION((0.,0.,1.)); +#3169=IFCDIRECTION((1.,0.,0.)); +#3170=IFCAXIS2PLACEMENT3D(#3167,#3168,#3169); +#3171=IFCPLANAREXTENT(1000.,1000.); +#3172=IFCTEXTLITERALWITHEXTENT('{{type.Name}}',#3170,.RIGHT.,#3171,'center'); +#3173=IFCSHAPEREPRESENTATION(#25,'Annotation','Annotation2D',(#3172)); +#3174=IFCCARTESIANPOINT((0.,0.,0.)); +#3175=IFCDIRECTION((1.,0.,0.)); +#3176=IFCDIRECTION((0.,0.,1.)); +#3177=IFCAXIS2PLACEMENT3D(#3174,#3176,#3175); +#3178=IFCREPRESENTATIONMAP(#3177,#3173); +#3179=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1743078627,#3,#7,1743078627); +#3180=IFCTYPEPRODUCT('0sws1hxNb2Og1etXqyoEh1',#3179,'NAME-TAG',$,'IfcAnnotation/TEXT',(#3182),(#3195),$); +#3181=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1743078627,#3,#7,1743078627); +#3182=IFCPROPERTYSET('11L$PtdnX8LfYigzRZ$g0a',#3181,'EPset_Annotation',$,(#3183)); +#3183=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('capsule-tag'),$); +#3184=IFCCARTESIANPOINT((0.,0.,0.)); +#3185=IFCDIRECTION((0.,0.,1.)); +#3186=IFCDIRECTION((1.,0.,0.)); +#3187=IFCAXIS2PLACEMENT3D(#3184,#3185,#3186); +#3188=IFCPLANAREXTENT(1000.,1000.); +#3189=IFCTEXTLITERALWITHEXTENT('{{Name}}',#3187,.RIGHT.,#3188,'center'); +#3190=IFCSHAPEREPRESENTATION(#25,'Annotation','Annotation2D',(#3189)); +#3191=IFCCARTESIANPOINT((0.,0.,0.)); +#3192=IFCDIRECTION((1.,0.,0.)); +#3193=IFCDIRECTION((0.,0.,1.)); +#3194=IFCAXIS2PLACEMENT3D(#3191,#3193,#3192); +#3195=IFCREPRESENTATIONMAP(#3194,#3190); +ENDSEC; +END-ISO-10303-21; diff --git a/src/bonsai/bonsai/bim/data/libraries/IFC4 Demo Library.ifc b/src/bonsai/bonsai/bim/data/libraries/IFC4 Demo Library.ifc index ad708cd2fe..0d2ee39618 100644 --- a/src/bonsai/bonsai/bim/data/libraries/IFC4 Demo Library.ifc +++ b/src/bonsai/bonsai/bim/data/libraries/IFC4 Demo Library.ifc @@ -1,7 +1,7 @@ ISO-10303-21; HEADER; FILE_DESCRIPTION(('ViewDefinition[DesignTransferView]'),'2;1'); -FILE_NAME('/dev/null','2024-03-03T16:03:58+11:00',(),(),'IfcOpenShell v0.7.0-eaa2aa05a','IfcOpenShell v0.7.0-eaa2aa05a','Nobody'); +FILE_NAME('/dev/null','2025-03-27T17:30:27+05:00',(''),(''),'IfcOpenShell 0.0.0','IfcOpenShell 0.0.0','Nobody'); FILE_SCHEMA(('IFC4')); ENDSEC; DATA; @@ -29,7 +29,7 @@ DATA; #22=IFCMATERIALLAYERSET((#24),$,$); #23=IFCRELASSOCIATESMATERIAL('0khP_Smdj12f2JrOTRbRKj',$,$,$,(#21),#22); #24=IFCMATERIALLAYER(#20,0.05,$,$,$,$,$); -#25=IFCRELDECLARES('31JriXdev6BP2sC9lcxdC1',$,$,$,#2,(#26,#48,#72,#59,#92,#30,#96,#63,#21,#54,#87,#210,#153,#34,#67,#38,#82,#77,#42)); +#25=IFCRELDECLARES('31JriXdev6BP2sC9lcxdC1',$,$,$,#2,(#59,#92,#38,#82,#30,#96,#77,#63,#42,#54,#87,#153,#34,#21,#67,#210,#26,#48,#72)); #26=IFCWALLTYPE('3R5onkTtX1IxdCMPoThRaw',$,'WAL100',$,$,$,$,$,$,.NOTDEFINED.); #27=IFCMATERIALLAYERSET((#29),$,$); #28=IFCRELASSOCIATESMATERIAL('0$mXRPCT16nP6Q70XFNvZv',$,$,$,(#26),#27); diff --git a/src/bonsai/bonsai/bim/data/libraries/IFC4X3 Demo Library.ifc b/src/bonsai/bonsai/bim/data/libraries/IFC4X3 Demo Library.ifc new file mode 100644 index 0000000000..47d2ff0bff --- /dev/null +++ b/src/bonsai/bonsai/bim/data/libraries/IFC4X3 Demo Library.ifc @@ -0,0 +1,1117 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition[DesignTransferView]'),'2;1'); +FILE_NAME('/dev/null','2025-03-27T17:30:27+05:00',(''),(''),'IfcOpenShell 0.0.0','IfcOpenShell 0.0.0','Nobody'); +FILE_SCHEMA(('IFC4X3_ADD2')); +ENDSEC; +DATA; +#1=IFCPROJECT('3NJUxHyTzEv96oezyDYEqf',$,'Bonsai Demo',$,$,$,$,(#12,#16),#7); +#2=IFCPROJECTLIBRARY('0D39k7hbT5ce$jWaCd2niG',$,'Bonsai Demo Library',$,$,$,$,$,$); +#3=IFCRELDECLARES('2RWVohyP57PBHT9zCs4H2O',$,$,$,#1,(#2)); +#4=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); +#5=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#6=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#7=IFCUNITASSIGNMENT((#5,#6,#4)); +#8=IFCCARTESIANPOINT((0.,0.,0.)); +#9=IFCDIRECTION((0.,0.,1.)); +#10=IFCDIRECTION((1.,0.,0.)); +#11=IFCAXIS2PLACEMENT3D(#8,#9,#10); +#12=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#11,$); +#13=IFCCARTESIANPOINT((0.,0.)); +#14=IFCDIRECTION((1.,0.)); +#15=IFCAXIS2PLACEMENT2D(#13,#14); +#16=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Plan',2,1.E-05,#15,$); +#17=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#12,$,.MODEL_VIEW.,$); +#18=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Plan',*,*,*,*,#16,$,.PLAN_VIEW.,$); +#19=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#16,$,.MODEL_VIEW.,$); +#20=IFCMATERIAL('Unknown',$,$); +#21=IFCWALLTYPE('2F1k78lI53fwS0rg3rqrRb',$,'WAL50',$,$,$,$,$,$,.NOTDEFINED.); +#22=IFCMATERIALLAYERSET((#24),$,$); +#23=IFCRELASSOCIATESMATERIAL('0khP_Smdj12f2JrOTRbRKj',$,$,$,(#21),#22); +#24=IFCMATERIALLAYER(#20,0.05,$,$,$,$,$); +#25=IFCRELDECLARES('31JriXdev6BP2sC9lcxdC1',$,$,$,#2,(#92,#82,#59,#38,#30,#96,#48,#77,#87,#63,#153,#42,#21,#54,#67,#210,#34,#26,#72)); +#26=IFCWALLTYPE('3R5onkTtX1IxdCMPoThRaw',$,'WAL100',$,$,$,$,$,$,.NOTDEFINED.); +#27=IFCMATERIALLAYERSET((#29),$,$); +#28=IFCRELASSOCIATESMATERIAL('0$mXRPCT16nP6Q70XFNvZv',$,$,$,(#26),#27); +#29=IFCMATERIALLAYER(#20,0.1,$,$,$,$,$); +#30=IFCWALLTYPE('1juanculbDJPqvqT2FCm8m',$,'WAL200',$,$,$,$,$,$,.NOTDEFINED.); +#31=IFCMATERIALLAYERSET((#33),$,$); +#32=IFCRELASSOCIATESMATERIAL('0FsB2A$frFn9AZW2IG38ny',$,$,$,(#30),#31); +#33=IFCMATERIALLAYER(#20,0.2,$,$,$,$,$); +#34=IFCWALLTYPE('05UYduR9r1vRxZZgP64Rdw',$,'WAL300',$,$,$,$,$,$,.NOTDEFINED.); +#35=IFCMATERIALLAYERSET((#37),$,$); +#36=IFCRELASSOCIATESMATERIAL('2FYhYrvmv4SBoZHVWDTTte',$,$,$,(#34),#35); +#37=IFCMATERIALLAYER(#20,0.3,$,$,$,$,$); +#38=IFCCOVERINGTYPE('0iLxgfHB9F2hRH2vMcw7Yv',$,'COV10',$,$,$,$,$,$,.NOTDEFINED.); +#39=IFCMATERIALLAYERSET((#41),$,$); +#40=IFCRELASSOCIATESMATERIAL('0yvFX0zgb9uvJ3ARnf4mfe',$,$,$,(#38),#39); +#41=IFCMATERIALLAYER(#20,0.01,$,$,$,$,$); +#42=IFCCOVERINGTYPE('15Riw2WTrAUPwvfLyKXJ2g',$,'COV20',$,$,(#46),$,$,$,.NOTDEFINED.); +#43=IFCMATERIALLAYERSET((#45),$,$); +#44=IFCRELASSOCIATESMATERIAL('1iAOG6NK9FBxitFtzN9qP5',$,$,$,(#42),#43); +#45=IFCMATERIALLAYER(#20,0.02,$,$,$,$,$); +#46=IFCPROPERTYSET('18ICCZ0fjDG9UXMyzrsFBA',$,'EPset_Parametric',$,(#47)); +#47=IFCPROPERTYSINGLEVALUE('LayerSetDirection',$,IFCLABEL('AXIS2'),$); +#48=IFCCOVERINGTYPE('0gEOtYULD0F9KD9zPoA6cJ',$,'COV30',$,$,(#52),$,$,$,.NOTDEFINED.); +#49=IFCMATERIALLAYERSET((#51),$,$); +#50=IFCRELASSOCIATESMATERIAL('0xd6dsjf13JA98q9fnAMpQ',$,$,$,(#48),#49); +#51=IFCMATERIALLAYER(#20,0.03,$,$,$,$,$); +#52=IFCPROPERTYSET('3qCbs1tuDCvuOXam5RrA$a',$,'EPset_Parametric',$,(#53)); +#53=IFCPROPERTYSINGLEVALUE('LayerSetDirection',$,IFCLABEL('AXIS3'),$); +#54=IFCRAMPTYPE('2yW1ePlyb8cOR6HdEntpRh',$,'RAM200',$,$,$,$,$,$,.NOTDEFINED.); +#55=IFCMATERIALLAYERSET((#57),$,$); +#56=IFCRELASSOCIATESMATERIAL('1x9ZyVim19AQtJhfEE06XR',$,$,$,(#54),#55); +#57=IFCMATERIALLAYER(#20,0.2,$,$,$,$,$); +#58=IFCCIRCLEPROFILEDEF(.AREA.,$,$,0.3); +#59=IFCPILETYPE('25MTkMtaH5QeCf$gFbvSSw',$,'P1',$,$,$,$,$,$,.NOTDEFINED.); +#60=IFCMATERIALPROFILESET($,$,(#62),$); +#61=IFCRELASSOCIATESMATERIAL('09FXUZCnrFEffxBrtg16gx',$,$,$,(#59),#60); +#62=IFCMATERIALPROFILE($,$,#20,#58,$,$); +#63=IFCSLABTYPE('1Akbal7tP5DAPW0ti$Qp30',$,'FLR200',$,$,$,$,$,$,.NOTDEFINED.); +#64=IFCMATERIALLAYERSET((#66),$,$); +#65=IFCRELASSOCIATESMATERIAL('0jzkXlkBL4HhmQ_FTWW6Cj',$,$,$,(#63),#64); +#66=IFCMATERIALLAYER(#20,0.2,$,$,$,$,$); +#67=IFCSLABTYPE('0$gpYNi3T08BrxaR67CxgI',$,'FLR300',$,$,$,$,$,$,.NOTDEFINED.); +#68=IFCMATERIALLAYERSET((#70),$,$); +#69=IFCRELASSOCIATESMATERIAL('3a6kjEM29DleYTlSkA8_DK',$,$,$,(#67),#68); +#70=IFCMATERIALLAYER(#20,0.3,$,$,$,$,$); +#71=IFCRECTANGLEPROFILEDEF(.AREA.,'500x600',$,0.5,0.6); +#72=IFCCOLUMNTYPE('278sjptdDDzgOZseERj390',$,'C1',$,$,$,$,$,$,.NOTDEFINED.); +#73=IFCMATERIALPROFILESET($,$,(#75),$); +#74=IFCRELASSOCIATESMATERIAL('1ppYXw39v6kBwi3rrIm4ZE',$,$,$,(#72),#73); +#75=IFCMATERIALPROFILE($,$,#20,#71,$,$); +#76=IFCCIRCLEHOLLOWPROFILEDEF(.AREA.,'500.0x5.0 CHS',$,0.25,0.005); +#77=IFCCOLUMNTYPE('3aSZOvGmr7jggSNwsq5PJE',$,'C2',$,$,$,$,$,$,.NOTDEFINED.); +#78=IFCMATERIALPROFILESET($,$,(#80),$); +#79=IFCRELASSOCIATESMATERIAL('1AtNJPaD14DgINbAjXvbU4',$,$,$,(#77),#78); +#80=IFCMATERIALPROFILE($,$,#20,#76,$,$); +#81=IFCRECTANGLEHOLLOWPROFILEDEF(.AREA.,'150x75x2.0 RHS',$,0.075,0.15,0.002,0.005,0.005); +#82=IFCCOLUMNTYPE('28iv3Kru12yQ7R7RRwNjvD',$,'C3',$,$,$,$,$,$,.NOTDEFINED.); +#83=IFCMATERIALPROFILESET($,$,(#85),$); +#84=IFCRELASSOCIATESMATERIAL('2M_oL$n3j6rBRnOW5RSk87',$,$,$,(#82),#83); +#85=IFCMATERIALPROFILE($,$,#20,#81,$,$); +#86=IFCISHAPEPROFILEDEF(.AREA.,'DEMO-I',$,0.1,0.2,0.005,0.01,0.005,$,$); +#87=IFCBEAMTYPE('2E$V5l4b54dxuToJ1A6IHp',$,'B1',$,$,$,$,$,$,.NOTDEFINED.); +#88=IFCMATERIALPROFILESET($,$,(#90),$); +#89=IFCRELASSOCIATESMATERIAL('3PUNnY7cj8LhyXbHKVqZnf',$,$,$,(#87),#88); +#90=IFCMATERIALPROFILE($,$,#20,#86,$,$); +#91=IFCCSHAPEPROFILEDEF(.AREA.,'DEMO-C',$,0.2,0.1,0.0015,0.03,0.005); +#92=IFCBEAMTYPE('3qutoZTvP0lvLWNXyjPhPm',$,'B2',$,$,$,$,$,$,.NOTDEFINED.); +#93=IFCMATERIALPROFILESET($,$,(#95),$); +#94=IFCRELASSOCIATESMATERIAL('3dGyQf42H2ahch2bSYPPHP',$,$,$,(#92),#93); +#95=IFCMATERIALPROFILE($,$,#20,#91,$,$); +#96=IFCWINDOWTYPE('0bK3c4PWL3eOMNwkPN$rlg',$,'WT01',$,$,$,(#135,#152),$,$,.NOTDEFINED.,.NOTDEFINED.,$,$); +#97=IFCINDEXEDPOLYGONALFACE((13,17,18,14)); +#98=IFCINDEXEDPOLYGONALFACE((5,6,3,4)); +#99=IFCINDEXEDPOLYGONALFACE((7,8,2,1)); +#100=IFCINDEXEDPOLYGONALFACE((6,7,1,3)); +#101=IFCINDEXEDPOLYGONALFACE((8,5,4,2)); +#102=IFCINDEXEDPOLYGONALFACE((12,11,10,9)); +#103=IFCINDEXEDPOLYGONALFACE((15,19,20,16)); +#104=IFCINDEXEDPOLYGONALFACE((14,18,19,15)); +#105=IFCINDEXEDPOLYGONALFACE((16,20,17,13)); +#106=IFCINDEXEDPOLYGONALFACE((4,17,20,2)); +#107=IFCINDEXEDPOLYGONALFACE((2,20,19,1)); +#108=IFCINDEXEDPOLYGONALFACE((8,16,13,5)); +#109=IFCINDEXEDPOLYGONALFACE((7,15,16,8)); +#110=IFCINDEXEDPOLYGONALFACE((1,19,18,3)); +#111=IFCINDEXEDPOLYGONALFACE((3,18,17,4)); +#112=IFCINDEXEDPOLYGONALFACE((6,14,15,7)); +#113=IFCINDEXEDPOLYGONALFACE((5,13,14,6)); +#114=IFCINDEXEDPOLYGONALFACE((24,21,22,23)); +#115=IFCINDEXEDPOLYGONALFACE((11,23,22,10)); +#116=IFCINDEXEDPOLYGONALFACE((10,22,21,9)); +#117=IFCINDEXEDPOLYGONALFACE((9,21,24,12)); +#118=IFCINDEXEDPOLYGONALFACE((12,24,23,11)); +#119=IFCCARTESIANPOINTLIST3D(((0.899999976158142,0.,1.20000004768372),(0.899999976158142,0.,0.),(0.,0.,1.20000004768372),(0.,0.,0.),(0.0999999940395355,0.,0.0999999940395355),(0.0999999940395355,0.,1.10000002384186),(0.800000011920929,0.,1.10000002384186),(0.800000011920929,0.,0.0999999940395355),(0.0999999940395355,0.0199999995529652,0.0999999940395355),(0.0999999940395355,0.0199999995529652,1.10000002384186),(0.800000011920929,0.0199999995529652,1.10000002384186),(0.800000011920929,0.0199999995529652,0.0999999940395355),(0.0999999940395355,0.0500000007450581,0.0999999940395355),(0.0999999940395355,0.0500000007450581,1.10000002384186),(0.800000011920929,0.0500000007450581,1.10000002384186),(0.800000011920929,0.0500000007450581,0.0999999940395355),(0.,0.0500000007450581,0.),(0.,0.0500000007450581,1.20000004768372),(0.899999976158142,0.0500000007450581,1.20000004768372),(0.899999976158142,0.0500000007450581,0.),(0.0999999940395355,0.0299999993294477,0.0999999940395355),(0.0999999940395355,0.0299999993294477,1.10000002384186),(0.800000011920929,0.0299999993294477,1.10000002384186),(0.800000011920929,0.0299999993294477,0.0999999940395355)),$); +#120=IFCPOLYGONALFACESET(#119,.T.,(#97,#98,#99,#100,#101,#103,#104,#105,#106,#107,#108,#109,#110,#111,#112,#113),$); +#121=IFCPOLYGONALFACESET(#119,.T.,(#102,#114,#115,#116,#117,#118),$); +#122=IFCSHAPEREPRESENTATION(#17,'Body','Tessellation',(#120,#121)); +#123=IFCSURFACESTYLE('Frame',.BOTH.,(#124)); +#124=IFCSURFACESTYLESHADING(#125,0.); +#125=IFCCOLOURRGB($,0.0429765619337559,0.0429765619337559,0.0429765619337559); +#126=IFCSURFACESTYLE('Glass',.BOTH.,(#127)); +#127=IFCSURFACESTYLESHADING(#128,0.799999997019768); +#128=IFCCOLOURRGB($,0.800000011920929,1.,1.); +#129=IFCSTYLEDITEM(#120,(#123),'Frame'); +#130=IFCSTYLEDITEM(#121,(#126),'Glass'); +#131=IFCCARTESIANPOINT((0.,0.,0.)); +#132=IFCDIRECTION((1.,0.,0.)); +#133=IFCDIRECTION((0.,0.,1.)); +#134=IFCAXIS2PLACEMENT3D(#131,#133,#132); +#135=IFCREPRESENTATIONMAP(#134,#122); +#136=IFCCARTESIANPOINTLIST2D(((0.100000023841858,0.0200000032782555),(0.800000011920929,0.0200000032782555),(0.800000011920929,0.0300000011920929),(0.100000023841858,0.0300000011920929)),$); +#137=IFCINDEXEDPOLYCURVE(#136,(IFCLINEINDEX((1,2,3,4,1))),$); +#138=IFCCARTESIANPOINTLIST2D(((0.899999976158142,0.0500000007450581),(0.800000011920929,0.0500000007450581),(0.800000011920929,0.),(0.899999976158142,0.)),$); +#139=IFCINDEXEDPOLYCURVE(#138,(IFCLINEINDEX((1,2,3,4,1))),$); +#140=IFCCARTESIANPOINTLIST2D(((0.,0.),(0.100000023841858,0.),(0.100000023841858,0.0500000007450581),(0.,0.0500000007450581)),$); +#141=IFCINDEXEDPOLYCURVE(#140,(IFCLINEINDEX((1,2,3,4,1))),$); +#142=IFCCARTESIANPOINTLIST2D(((0.100000023841858,0.0500000007450581),(0.800000011920929,0.0500000007450581)),$); +#143=IFCINDEXEDPOLYCURVE(#142,$,$); +#144=IFCCARTESIANPOINTLIST2D(((0.100000023841858,0.),(0.800000011920929,0.)),$); +#145=IFCINDEXEDPOLYCURVE(#144,$,$); +#146=IFCGEOMETRICCURVESET((#137,#139,#141,#143,#145)); +#147=IFCSHAPEREPRESENTATION(#18,'Body','Annotation2D',(#146)); +#148=IFCCARTESIANPOINT((0.,0.,0.)); +#149=IFCDIRECTION((1.,0.,0.)); +#150=IFCDIRECTION((0.,0.,1.)); +#151=IFCAXIS2PLACEMENT3D(#148,#150,#149); +#152=IFCREPRESENTATIONMAP(#151,#147); +#153=IFCDOORTYPE('2j0vIBgkH0ERnBCP0cpcCz',$,'DT01',$,$,$,(#196,#209),$,$,.NOTDEFINED.,.NOTDEFINED.,$,$); +#154=IFCINDEXEDPOLYGONALFACE((17,16,15,14)); +#155=IFCINDEXEDPOLYGONALFACE((2,3,29,28)); +#156=IFCINDEXEDPOLYGONALFACE((27,28,29,30,32,31)); +#157=IFCINDEXEDPOLYGONALFACE((7,6,5,3)); +#158=IFCINDEXEDPOLYGONALFACE((8,7,3,2)); +#159=IFCINDEXEDPOLYGONALFACE((23,24,6,7)); +#160=IFCINDEXEDPOLYGONALFACE((21,20,4,24,23,22)); +#161=IFCINDEXEDPOLYGONALFACE((12,13,14,15)); +#162=IFCINDEXEDPOLYGONALFACE((16,19,12,15)); +#163=IFCINDEXEDPOLYGONALFACE((11,10,25,26)); +#164=IFCINDEXEDPOLYGONALFACE((25,1,27,31)); +#165=IFCINDEXEDPOLYGONALFACE((24,4,11,6)); +#166=IFCINDEXEDPOLYGONALFACE((20,21,9,10)); +#167=IFCINDEXEDPOLYGONALFACE((9,8,2,1)); +#168=IFCINDEXEDPOLYGONALFACE((10,9,1,25)); +#169=IFCINDEXEDPOLYGONALFACE((22,23,7,8)); +#170=IFCINDEXEDPOLYGONALFACE((4,20,10,11)); +#171=IFCINDEXEDPOLYGONALFACE((19,16,17,18)); +#172=IFCINDEXEDPOLYGONALFACE((19,18,13,12)); +#173=IFCINDEXEDPOLYGONALFACE((21,22,8,9)); +#174=IFCINDEXEDPOLYGONALFACE((6,11,26,5)); +#175=IFCINDEXEDPOLYGONALFACE((18,17,14,13)); +#176=IFCINDEXEDPOLYGONALFACE((5,26,32,30)); +#177=IFCINDEXEDPOLYGONALFACE((1,2,28,27)); +#178=IFCINDEXEDPOLYGONALFACE((26,25,31,32)); +#179=IFCINDEXEDPOLYGONALFACE((3,5,30,29)); +#180=IFCCARTESIANPOINTLIST3D(((0.955000162124634,0.,2.09000015258789),(0.955000162124634,0.0549999885261059,2.09000015258789),(0.970000028610229,0.0549999922513962,2.10500001907349),(0.,0.0999999940395355,0.),(0.970000028610229,0.0999999940395355,2.10500001907349),(0.0399999916553497,0.0999999940395355,2.10500001907349),(0.0399999916553497,0.0549999922513962,2.10500001907349),(0.0550000071525574,0.0549999885261059,2.09000015258789),(0.0550000071525574,0.,2.09000015258789),(0.,0.,2.14500021934509),(0.,0.100000001490116,2.14500021934509),(0.0449999868869781,0.0999999940395355,2.09999990463257),(0.0449999868869781,0.0599999949336052,2.09999990463257),(0.965000033378601,0.0599999949336052,2.09999990463257),(0.965000033378601,0.0999999940395355,2.09999990463257),(0.965000033378601,0.0999999940395355,0.),(0.965000033378601,0.0599999949336052,0.),(0.0449999868869781,0.0599999949336052,0.),(0.0449999868869781,0.0999999940395355,0.),(0.,0.,0.),(0.0550000071525574,0.,0.),(0.0550000071525574,0.0549999922513962,0.),(0.0399999916553497,0.0549999922513962,0.),(0.0399999916553497,0.0999999940395355,0.),(1.01000034809113,0.,2.14500021934509),(1.01000034809113,0.100000001490116,2.14500021934509),(0.955000162124634,0.,0.),(0.955000162124634,0.0549999885261059,0.),(0.970000028610229,0.0549999922513962,0.),(0.970000028610229,0.0999999940395355,0.),(1.01000034809113,0.,0.),(1.01000034809113,0.100000001490116,0.)),$); +#181=IFCPOLYGONALFACESET(#180,.T.,(#155,#156,#157,#158,#159,#160,#163,#164,#165,#166,#167,#168,#169,#170,#173,#174,#176,#177,#178,#179),$); +#182=IFCPOLYGONALFACESET(#180,.T.,(#154,#161,#162,#171,#172,#175),$); +#183=IFCSHAPEREPRESENTATION(#17,'Body','Tessellation',(#181,#182)); +#184=IFCSURFACESTYLE('Frame',.BOTH.,(#185)); +#185=IFCSURFACESTYLESHADING(#186,0.); +#186=IFCCOLOURRGB($,0.0429765619337559,0.0429765619337559,0.0429765619337559); +#187=IFCSURFACESTYLE('Panel',.BOTH.,(#188)); +#188=IFCSURFACESTYLESHADING(#189,0.); +#189=IFCCOLOURRGB($,0.184475064277649,0.184475019574165,0.184475019574165); +#190=IFCSTYLEDITEM(#181,(#184),'Frame'); +#191=IFCSTYLEDITEM(#182,(#187),'Panel'); +#192=IFCCARTESIANPOINT((0.,0.,0.)); +#193=IFCDIRECTION((1.,0.,0.)); +#194=IFCDIRECTION((0.,0.,1.)); +#195=IFCAXIS2PLACEMENT3D(#192,#194,#193); +#196=IFCREPRESENTATIONMAP(#195,#183); +#197=IFCCARTESIANPOINTLIST2D(((0.964999914169312,1.0200001001358),(0.965000033378601,0.0999999940395355),(0.925000011920929,0.0999999940395355),(0.924999952316284,1.0200001001358),(0.964999914169312,1.0200001001358),(0.844915807247162,1.01212930679321),(0.726886332035065,0.988651752471924),(0.612931072711945,0.949969172477722),(0.504999756813049,0.896743297576904),(0.404939234256744,0.829885005950928),(0.314461469650269,0.750538170337677),(0.235114604234695,0.660060405731201),(0.168256282806396,0.559999823570251),(0.115030474960804,0.452068567276001),(0.0763478726148605,0.338113307952881),(0.0528703518211842,0.220083817839622),(0.0449996180832386,0.099999688565731)),$); +#198=IFCINDEXEDPOLYCURVE(#197,$,$); +#199=IFCCARTESIANPOINTLIST2D(((0.970000028610229,0.0549999922513962),(0.955000162124634,0.0549999922513962),(0.955000162124634,0.),(1.01000034809113,0.),(1.01000034809113,0.0999999940395355),(0.970000028610229,0.0999999940395355)),$); +#200=IFCINDEXEDPOLYCURVE(#199,(IFCLINEINDEX((1,2,3,4,5,6,1))),$); +#201=IFCCARTESIANPOINTLIST2D(((0.,0.),(0.,0.0999999940395355),(0.0399999916553497,0.0999999940395355),(0.0399999916553497,0.0549999922513962),(0.0550000071525574,0.0549999922513962),(0.0550000071525574,0.)),$); +#202=IFCINDEXEDPOLYCURVE(#201,(IFCLINEINDEX((1,2,3,4,5,6,1))),$); +#203=IFCGEOMETRICCURVESET((#198,#200,#202)); +#204=IFCSHAPEREPRESENTATION(#18,'Body','Annotation2D',(#203)); +#205=IFCCARTESIANPOINT((0.,0.,0.)); +#206=IFCDIRECTION((1.,0.,0.)); +#207=IFCDIRECTION((0.,0.,1.)); +#208=IFCAXIS2PLACEMENT3D(#205,#207,#206); +#209=IFCREPRESENTATIONMAP(#208,#204); +#210=IFCFURNITURETYPE('02XxQ_3oT0SPrmFPATrt7o',$,'BUN01',$,$,$,(#931,#952),$,$,.NOTDEFINED.,.NOTDEFINED.); +#211=IFCINDEXEDPOLYGONALFACE((187,278,44)); +#212=IFCINDEXEDPOLYGONALFACE((21,52,60)); +#213=IFCINDEXEDPOLYGONALFACE((91,100,31)); +#214=IFCINDEXEDPOLYGONALFACE((162,19,191)); +#215=IFCINDEXEDPOLYGONALFACE((288,180,159)); +#216=IFCINDEXEDPOLYGONALFACE((241,219,307)); +#217=IFCINDEXEDPOLYGONALFACE((54,93,173)); +#218=IFCINDEXEDPOLYGONALFACE((60,45,21)); +#219=IFCINDEXEDPOLYGONALFACE((58,110,55)); +#220=IFCINDEXEDPOLYGONALFACE((64,18,70)); +#221=IFCINDEXEDPOLYGONALFACE((2,207,162)); +#222=IFCINDEXEDPOLYGONALFACE((10,176,188)); +#223=IFCINDEXEDPOLYGONALFACE((105,114,113)); +#224=IFCINDEXEDPOLYGONALFACE((220,106,249)); +#225=IFCINDEXEDPOLYGONALFACE((252,321,244)); +#226=IFCINDEXEDPOLYGONALFACE((162,57,19)); +#227=IFCINDEXEDPOLYGONALFACE((224,147,220)); +#228=IFCINDEXEDPOLYGONALFACE((90,373,124)); +#229=IFCINDEXEDPOLYGONALFACE((70,199,64)); +#230=IFCINDEXEDPOLYGONALFACE((256,248,258)); +#231=IFCINDEXEDPOLYGONALFACE((115,212,207)); +#232=IFCINDEXEDPOLYGONALFACE((103,36,7)); +#233=IFCINDEXEDPOLYGONALFACE((71,306,320)); +#234=IFCINDEXEDPOLYGONALFACE((297,267,294)); +#235=IFCINDEXEDPOLYGONALFACE((57,50,19)); +#236=IFCINDEXEDPOLYGONALFACE((117,44,188)); +#237=IFCINDEXEDPOLYGONALFACE((62,56,153)); +#238=IFCINDEXEDPOLYGONALFACE((106,147,120)); +#239=IFCINDEXEDPOLYGONALFACE((254,244,245)); +#240=IFCINDEXEDPOLYGONALFACE((208,207,2)); +#241=IFCINDEXEDPOLYGONALFACE((256,257,250)); +#242=IFCINDEXEDPOLYGONALFACE((203,205,211)); +#243=IFCINDEXEDPOLYGONALFACE((56,278,157)); +#244=IFCINDEXEDPOLYGONALFACE((103,7,9)); +#245=IFCINDEXEDPOLYGONALFACE((63,140,176)); +#246=IFCINDEXEDPOLYGONALFACE((15,109,118)); +#247=IFCINDEXEDPOLYGONALFACE((59,159,180)); +#248=IFCINDEXEDPOLYGONALFACE((158,154,208)); +#249=IFCINDEXEDPOLYGONALFACE((300,241,308)); +#250=IFCINDEXEDPOLYGONALFACE((23,32,42)); +#251=IFCINDEXEDPOLYGONALFACE((44,278,56)); +#252=IFCINDEXEDPOLYGONALFACE((189,259,67)); +#253=IFCINDEXEDPOLYGONALFACE((309,304,333)); +#254=IFCINDEXEDPOLYGONALFACE((136,89,259)); +#255=IFCINDEXEDPOLYGONALFACE((31,191,19)); +#256=IFCINDEXEDPOLYGONALFACE((295,304,294)); +#257=IFCINDEXEDPOLYGONALFACE((50,38,19)); +#258=IFCINDEXEDPOLYGONALFACE((44,62,10)); +#259=IFCINDEXEDPOLYGONALFACE((369,25,227)); +#260=IFCINDEXEDPOLYGONALFACE((136,47,233)); +#261=IFCINDEXEDPOLYGONALFACE((33,54,201)); +#262=IFCINDEXEDPOLYGONALFACE((333,304,329)); +#263=IFCINDEXEDPOLYGONALFACE((281,110,285)); +#264=IFCINDEXEDPOLYGONALFACE((275,80,276)); +#265=IFCINDEXEDPOLYGONALFACE((119,106,120)); +#266=IFCINDEXEDPOLYGONALFACE((276,80,233)); +#267=IFCINDEXEDPOLYGONALFACE((232,318,312)); +#268=IFCINDEXEDPOLYGONALFACE((208,63,115)); +#269=IFCINDEXEDPOLYGONALFACE((150,288,159)); +#270=IFCINDEXEDPOLYGONALFACE((286,287,284)); +#271=IFCINDEXEDPOLYGONALFACE((286,285,287)); +#272=IFCINDEXEDPOLYGONALFACE((285,286,279)); +#273=IFCINDEXEDPOLYGONALFACE((239,171,240)); +#274=IFCINDEXEDPOLYGONALFACE((233,47,276)); +#275=IFCINDEXEDPOLYGONALFACE((124,213,90)); +#276=IFCINDEXEDPOLYGONALFACE((157,278,47)); +#277=IFCINDEXEDPOLYGONALFACE((187,47,157)); +#278=IFCINDEXEDPOLYGONALFACE((268,75,222)); +#279=IFCINDEXEDPOLYGONALFACE((101,269,232)); +#280=IFCINDEXEDPOLYGONALFACE((277,7,13)); +#281=IFCINDEXEDPOLYGONALFACE((140,63,74)); +#282=IFCINDEXEDPOLYGONALFACE((140,74,56)); +#283=IFCINDEXEDPOLYGONALFACE((74,153,56)); +#284=IFCINDEXEDPOLYGONALFACE((57,201,50)); +#285=IFCINDEXEDPOLYGONALFACE((320,236,193)); +#286=IFCINDEXEDPOLYGONALFACE((222,236,268)); +#287=IFCINDEXEDPOLYGONALFACE((173,50,201)); +#288=IFCINDEXEDPOLYGONALFACE((299,267,297)); +#289=IFCINDEXEDPOLYGONALFACE((162,212,57)); +#290=IFCINDEXEDPOLYGONALFACE((208,115,207)); +#291=IFCINDEXEDPOLYGONALFACE((267,292,274)); +#292=IFCINDEXEDPOLYGONALFACE((98,197,277)); +#293=IFCINDEXEDPOLYGONALFACE((295,328,329)); +#294=IFCINDEXEDPOLYGONALFACE((158,208,2)); +#295=IFCINDEXEDPOLYGONALFACE((201,57,33)); +#296=IFCINDEXEDPOLYGONALFACE((187,47,278)); +#297=IFCINDEXEDPOLYGONALFACE((241,307,308)); +#298=IFCINDEXEDPOLYGONALFACE((335,317,245)); +#299=IFCINDEXEDPOLYGONALFACE((328,330,329)); +#300=IFCINDEXEDPOLYGONALFACE((84,128,121)); +#301=IFCINDEXEDPOLYGONALFACE((331,330,328)); +#302=IFCINDEXEDPOLYGONALFACE((300,331,328)); +#303=IFCINDEXEDPOLYGONALFACE((129,19,38)); +#304=IFCINDEXEDPOLYGONALFACE((154,298,66)); +#305=IFCINDEXEDPOLYGONALFACE((317,322,323)); +#306=IFCINDEXEDPOLYGONALFACE((302,297,303)); +#307=IFCINDEXEDPOLYGONALFACE((212,93,167)); +#308=IFCINDEXEDPOLYGONALFACE((94,185,184)); +#309=IFCINDEXEDPOLYGONALFACE((211,121,100)); +#310=IFCINDEXEDPOLYGONALFACE((212,173,93)); +#311=IFCINDEXEDPOLYGONALFACE((317,254,245)); +#312=IFCINDEXEDPOLYGONALFACE((51,15,41)); +#313=IFCINDEXEDPOLYGONALFACE((321,339,244)); +#314=IFCINDEXEDPOLYGONALFACE((244,335,245)); +#315=IFCINDEXEDPOLYGONALFACE((211,204,121)); +#316=IFCINDEXEDPOLYGONALFACE((246,72,358)); +#317=IFCINDEXEDPOLYGONALFACE((300,360,301)); +#318=IFCINDEXEDPOLYGONALFACE((234,177,39)); +#319=IFCINDEXEDPOLYGONALFACE((125,152,177)); +#320=IFCINDEXEDPOLYGONALFACE((338,314,311)); +#321=IFCINDEXEDPOLYGONALFACE((149,94,152)); +#322=IFCINDEXEDPOLYGONALFACE((39,175,137)); +#323=IFCINDEXEDPOLYGONALFACE((334,292,267)); +#324=IFCINDEXEDPOLYGONALFACE((343,338,340,346)); +#325=IFCINDEXEDPOLYGONALFACE((283,286,284)); +#326=IFCINDEXEDPOLYGONALFACE((129,16,53)); +#327=IFCINDEXEDPOLYGONALFACE((102,249,106)); +#328=IFCINDEXEDPOLYGONALFACE((197,12,23)); +#329=IFCINDEXEDPOLYGONALFACE((330,310,178)); +#330=IFCINDEXEDPOLYGONALFACE((307,61,22,308)); +#331=IFCINDEXEDPOLYGONALFACE((300,310,331)); +#332=IFCINDEXEDPOLYGONALFACE((205,190,194)); +#333=IFCINDEXEDPOLYGONALFACE((133,2,31)); +#334=IFCINDEXEDPOLYGONALFACE((85,92,20)); +#335=IFCINDEXEDPOLYGONALFACE((360,39,301)); +#336=IFCINDEXEDPOLYGONALFACE((122,47,136)); +#337=IFCINDEXEDPOLYGONALFACE((281,282,186)); +#338=IFCINDEXEDPOLYGONALFACE((2,191,31)); +#339=IFCINDEXEDPOLYGONALFACE((250,249,247)); +#340=IFCINDEXEDPOLYGONALFACE((58,214,216)); +#341=IFCINDEXEDPOLYGONALFACE((234,138,143)); +#342=IFCINDEXEDPOLYGONALFACE((141,298,154)); +#343=IFCINDEXEDPOLYGONALFACE((27,45,76)); +#344=IFCINDEXEDPOLYGONALFACE((146,181,145)); +#345=IFCINDEXEDPOLYGONALFACE((144,181,180)); +#346=IFCINDEXEDPOLYGONALFACE((195,185,179)); +#347=IFCINDEXEDPOLYGONALFACE((228,223,229)); +#348=IFCINDEXEDPOLYGONALFACE((49,358,72)); +#349=IFCINDEXEDPOLYGONALFACE((74,34,183)); +#350=IFCINDEXEDPOLYGONALFACE((221,218,223)); +#351=IFCINDEXEDPOLYGONALFACE((146,107,108)); +#352=IFCINDEXEDPOLYGONALFACE((194,204,205)); +#353=IFCINDEXEDPOLYGONALFACE((352,359,280,279)); +#354=IFCINDEXEDPOLYGONALFACE((46,64,199)); +#355=IFCINDEXEDPOLYGONALFACE((366,86,251)); +#356=IFCINDEXEDPOLYGONALFACE((48,114,105)); +#357=IFCINDEXEDPOLYGONALFACE((198,95,164)); +#358=IFCINDEXEDPOLYGONALFACE((372,65,167)); +#359=IFCINDEXEDPOLYGONALFACE((74,132,153)); +#360=IFCINDEXEDPOLYGONALFACE((21,12,4)); +#361=IFCINDEXEDPOLYGONALFACE((288,111,113)); +#362=IFCINDEXEDPOLYGONALFACE((75,225,174)); +#363=IFCINDEXEDPOLYGONALFACE((166,262,200)); +#364=IFCINDEXEDPOLYGONALFACE((223,230,229)); +#365=IFCINDEXEDPOLYGONALFACE((26,92,3)); +#366=IFCINDEXEDPOLYGONALFACE((219,88,82)); +#367=IFCINDEXEDPOLYGONALFACE((355,357,365,364)); +#368=IFCINDEXEDPOLYGONALFACE((322,325,324)); +#369=IFCINDEXEDPOLYGONALFACE((257,220,250)); +#370=IFCINDEXEDPOLYGONALFACE((289,104,253)); +#371=IFCINDEXEDPOLYGONALFACE((228,108,221)); +#372=IFCINDEXEDPOLYGONALFACE((119,218,102)); +#373=IFCINDEXEDPOLYGONALFACE((367,124,25)); +#374=IFCINDEXEDPOLYGONALFACE((327,325,326)); +#375=IFCINDEXEDPOLYGONALFACE((40,115,63)); +#376=IFCINDEXEDPOLYGONALFACE((321,248,247)); +#377=IFCINDEXEDPOLYGONALFACE((158,83,141)); +#378=IFCINDEXEDPOLYGONALFACE((13,98,277)); +#379=IFCINDEXEDPOLYGONALFACE((352,345,343,365)); +#380=IFCINDEXEDPOLYGONALFACE((5,374,1)); +#381=IFCINDEXEDPOLYGONALFACE((339,347,348,341)); +#382=IFCINDEXEDPOLYGONALFACE((135,87,22)); +#383=IFCINDEXEDPOLYGONALFACE((156,224,231)); +#384=IFCINDEXEDPOLYGONALFACE((163,63,170)); +#385=IFCINDEXEDPOLYGONALFACE((56,142,140)); +#386=IFCINDEXEDPOLYGONALFACE((362,355,356,363)); +#387=IFCINDEXEDPOLYGONALFACE((88,203,15)); +#388=IFCINDEXEDPOLYGONALFACE((24,163,73)); +#389=IFCINDEXEDPOLYGONALFACE((14,78,68)); +#390=IFCINDEXEDPOLYGONALFACE((248,260,258)); +#391=IFCINDEXEDPOLYGONALFACE((78,26,17)); +#392=IFCINDEXEDPOLYGONALFACE((16,17,53)); +#393=IFCINDEXEDPOLYGONALFACE((161,164,95)); +#394=IFCINDEXEDPOLYGONALFACE((291,287,293)); +#395=IFCINDEXEDPOLYGONALFACE((127,18,32)); +#396=IFCINDEXEDPOLYGONALFACE((182,199,148)); +#397=IFCINDEXEDPOLYGONALFACE((319,71,320)); +#398=IFCINDEXEDPOLYGONALFACE((225,232,312)); +#399=IFCINDEXEDPOLYGONALFACE((302,309,289)); +#400=IFCINDEXEDPOLYGONALFACE((13,36,11)); +#401=IFCINDEXEDPOLYGONALFACE((308,87,310)); +#402=IFCINDEXEDPOLYGONALFACE((353,348,347,246)); +#403=IFCINDEXEDPOLYGONALFACE((262,79,200)); +#404=IFCINDEXEDPOLYGONALFACE((131,73,135)); +#405=IFCINDEXEDPOLYGONALFACE((370,213,243)); +#406=IFCINDEXEDPOLYGONALFACE((92,100,91)); +#407=IFCINDEXEDPOLYGONALFACE((89,233,80)); +#408=IFCINDEXEDPOLYGONALFACE((332,165,174)); +#409=IFCINDEXEDPOLYGONALFACE((1,374,2)); +#410=IFCINDEXEDPOLYGONALFACE((28,368,209)); +#411=IFCINDEXEDPOLYGONALFACE((189,136,259)); +#412=IFCINDEXEDPOLYGONALFACE((326,332,327)); +#413=IFCINDEXEDPOLYGONALFACE((117,122,189)); +#414=IFCINDEXEDPOLYGONALFACE((132,16,40)); +#415=IFCINDEXEDPOLYGONALFACE((263,334,311)); +#416=IFCINDEXEDPOLYGONALFACE((134,183,68)); +#417=IFCINDEXEDPOLYGONALFACE((157,122,142)); +#418=IFCINDEXEDPOLYGONALFACE((239,230,97)); +#419=IFCINDEXEDPOLYGONALFACE((180,96,59)); +#420=IFCINDEXEDPOLYGONALFACE((99,113,111)); +#421=IFCINDEXEDPOLYGONALFACE((22,131,135)); +#422=IFCINDEXEDPOLYGONALFACE((321,249,349)); +#423=IFCINDEXEDPOLYGONALFACE((156,120,147)); +#424=IFCINDEXEDPOLYGONALFACE((148,181,182)); +#425=IFCINDEXEDPOLYGONALFACE((152,126,149)); +#426=IFCINDEXEDPOLYGONALFACE((346,340,337,344)); +#427=IFCINDEXEDPOLYGONALFACE((358,215,353,246)); +#428=IFCINDEXEDPOLYGONALFACE((275,89,80)); +#429=IFCINDEXEDPOLYGONALFACE((240,37,239)); +#430=IFCINDEXEDPOLYGONALFACE((14,183,34)); +#431=IFCINDEXEDPOLYGONALFACE((293,295,274)); +#432=IFCINDEXEDPOLYGONALFACE((350,351,344,342)); +#433=IFCINDEXEDPOLYGONALFACE((148,112,96)); +#434=IFCINDEXEDPOLYGONALFACE((313,325,264)); +#435=IFCINDEXEDPOLYGONALFACE((154,170,208)); +#436=IFCINDEXEDPOLYGONALFACE((226,123,46)); +#437=IFCINDEXEDPOLYGONALFACE((351,364,346,344)); +#438=IFCINDEXEDPOLYGONALFACE((355,362,216,357)); +#439=IFCINDEXEDPOLYGONALFACE((349,339,321)); +#440=IFCINDEXEDPOLYGONALFACE((318,324,327)); +#441=IFCINDEXEDPOLYGONALFACE((338,311,334,340)); +#442=IFCINDEXEDPOLYGONALFACE((326,299,302)); +#443=IFCINDEXEDPOLYGONALFACE((112,59,96)); +#444=IFCINDEXEDPOLYGONALFACE((262,198,242)); +#445=IFCINDEXEDPOLYGONALFACE((272,51,41)); +#446=IFCINDEXEDPOLYGONALFACE((318,261,315)); +#447=IFCINDEXEDPOLYGONALFACE((167,57,212)); +#448=IFCINDEXEDPOLYGONALFACE((271,266,255)); +#449=IFCINDEXEDPOLYGONALFACE((218,246,102)); +#450=IFCINDEXEDPOLYGONALFACE((94,179,185)); +#451=IFCINDEXEDPOLYGONALFACE((343,346,364,365)); +#452=IFCINDEXEDPOLYGONALFACE((40,153,132)); +#453=IFCINDEXEDPOLYGONALFACE((345,314,338,343)); +#454=IFCINDEXEDPOLYGONALFACE((8,121,204)); +#455=IFCINDEXEDPOLYGONALFACE((32,64,123)); +#456=IFCINDEXEDPOLYGONALFACE((88,109,82)); +#457=IFCINDEXEDPOLYGONALFACE((133,128,81)); +#458=IFCINDEXEDPOLYGONALFACE((193,319,320)); +#459=IFCINDEXEDPOLYGONALFACE((370,367,369)); +#460=IFCINDEXEDPOLYGONALFACE((6,9,42)); +#461=IFCINDEXEDPOLYGONALFACE((214,186,282)); +#462=IFCINDEXEDPOLYGONALFACE((200,75,166)); +#463=IFCINDEXEDPOLYGONALFACE((375,79,139)); +#464=IFCINDEXEDPOLYGONALFACE((95,309,333)); +#465=IFCINDEXEDPOLYGONALFACE((221,49,72)); +#466=IFCINDEXEDPOLYGONALFACE((36,273,11)); +#467=IFCINDEXEDPOLYGONALFACE((69,155,251)); +#468=IFCINDEXEDPOLYGONALFACE((316,302,289)); +#469=IFCINDEXEDPOLYGONALFACE((297,304,303)); +#470=IFCINDEXEDPOLYGONALFACE((195,159,196)); +#471=IFCINDEXEDPOLYGONALFACE((110,186,55)); +#472=IFCINDEXEDPOLYGONALFACE((323,324,315)); +#473=IFCINDEXEDPOLYGONALFACE((172,83,242)); +#474=IFCINDEXEDPOLYGONALFACE((61,219,82)); +#475=IFCINDEXEDPOLYGONALFACE((283,291,265)); +#476=IFCINDEXEDPOLYGONALFACE((184,175,177)); +#477=IFCINDEXEDPOLYGONALFACE((349,246,347)); +#478=IFCINDEXEDPOLYGONALFACE((174,166,75)); +#479=IFCINDEXEDPOLYGONALFACE((48,363,361)); +#480=IFCINDEXEDPOLYGONALFACE((199,237,46)); +#481=IFCINDEXEDPOLYGONALFACE((164,242,198)); +#482=IFCINDEXEDPOLYGONALFACE((290,317,335,336)); +#483=IFCINDEXEDPOLYGONALFACE((217,298,160)); +#484=IFCINDEXEDPOLYGONALFACE((193,200,79)); +#485=IFCINDEXEDPOLYGONALFACE((253,166,165)); +#486=IFCINDEXEDPOLYGONALFACE((202,116,51)); +#487=IFCINDEXEDPOLYGONALFACE((236,366,268)); +#488=IFCINDEXEDPOLYGONALFACE((170,73,163)); +#489=IFCINDEXEDPOLYGONALFACE((360,328,296)); +#490=IFCINDEXEDPOLYGONALFACE((354,350,348,353)); +#491=IFCINDEXEDPOLYGONALFACE((359,357,216,214)); +#492=IFCINDEXEDPOLYGONALFACE((143,110,125)); +#493=IFCINDEXEDPOLYGONALFACE((265,314,345,283)); +#494=IFCINDEXEDPOLYGONALFACE((252,261,260)); +#495=IFCINDEXEDPOLYGONALFACE((305,337,340,334)); +#496=IFCINDEXEDPOLYGONALFACE((131,116,24)); +#497=IFCINDEXEDPOLYGONALFACE((104,168,253)); +#498=IFCINDEXEDPOLYGONALFACE((126,99,111)); +#499=IFCINDEXEDPOLYGONALFACE((47,275,276)); +#500=IFCINDEXEDPOLYGONALFACE((230,120,97)); +#501=IFCINDEXEDPOLYGONALFACE((279,283,345,352)); +#502=IFCINDEXEDPOLYGONALFACE((67,89,275)); +#503=IFCINDEXEDPOLYGONALFACE((257,271,255)); +#504=IFCINDEXEDPOLYGONALFACE((257,231,224)); +#505=IFCINDEXEDPOLYGONALFACE((316,253,165)); +#506=IFCINDEXEDPOLYGONALFACE((17,3,53)); +#507=IFCINDEXEDPOLYGONALFACE((273,171,266)); +#508=IFCINDEXEDPOLYGONALFACE((260,270,258)); +#509=IFCINDEXEDPOLYGONALFACE((362,58,216)); +#510=IFCINDEXEDPOLYGONALFACE((48,108,107)); +#511=IFCINDEXEDPOLYGONALFACE((57,65,33)); +#512=IFCINDEXEDPOLYGONALFACE((160,172,164)); +#513=IFCINDEXEDPOLYGONALFACE((190,235,184)); +#514=IFCINDEXEDPOLYGONALFACE((354,353,215,361)); +#515=IFCINDEXEDPOLYGONALFACE((258,271,256)); +#516=IFCINDEXEDPOLYGONALFACE((155,366,251)); +#517=IFCINDEXEDPOLYGONALFACE((365,357,359,352)); +#518=IFCINDEXEDPOLYGONALFACE((169,20,26)); +#519=IFCINDEXEDPOLYGONALFACE((312,174,225)); +#520=IFCINDEXEDPOLYGONALFACE((273,43,11)); +#521=IFCINDEXEDPOLYGONALFACE((264,317,290)); +#522=IFCINDEXEDPOLYGONALFACE((287,296,293)); +#523=IFCINDEXEDPOLYGONALFACE((159,149,150)); +#524=IFCINDEXEDPOLYGONALFACE((267,305,334)); +#525=IFCINDEXEDPOLYGONALFACE((206,211,100)); +#526=IFCINDEXEDPOLYGONALFACE((126,150,149)); +#527=IFCINDEXEDPOLYGONALFACE((288,114,144)); +#528=IFCINDEXEDPOLYGONALFACE((266,101,273)); +#529=IFCINDEXEDPOLYGONALFACE((123,42,32)); +#530=IFCINDEXEDPOLYGONALFACE((255,171,231)); +#531=IFCINDEXEDPOLYGONALFACE((34,116,14)); +#532=IFCINDEXEDPOLYGONALFACE((91,3,92)); +#533=IFCINDEXEDPOLYGONALFACE((287,143,138)); +#534=IFCINDEXEDPOLYGONALFACE((77,12,71)); +#535=IFCINDEXEDPOLYGONALFACE((95,178,161)); +#536=IFCINDEXEDPOLYGONALFACE((285,280,281)); +#537=IFCINDEXEDPOLYGONALFACE((242,139,262)); +#538=IFCINDEXEDPOLYGONALFACE((332,318,327)); +#539=IFCINDEXEDPOLYGONALFACE((226,239,37)); +#540=IFCINDEXEDPOLYGONALFACE((175,219,137)); +#541=IFCINDEXEDPOLYGONALFACE((177,94,184)); +#542=IFCINDEXEDPOLYGONALFACE((103,226,37)); +#543=IFCINDEXEDPOLYGONALFACE((372,371,65)); +#544=IFCINDEXEDPOLYGONALFACE((341,335,244,339)); +#545=IFCINDEXEDPOLYGONALFACE((101,69,43)); +#546=IFCINDEXEDPOLYGONALFACE((146,192,182)); +#547=IFCINDEXEDPOLYGONALFACE((52,77,5)); +#548=IFCINDEXEDPOLYGONALFACE((133,60,52)); +#549=IFCINDEXEDPOLYGONALFACE((28,243,213)); +#550=IFCINDEXEDPOLYGONALFACE((110,126,125)); +#551=IFCINDEXEDPOLYGONALFACE((140,188,176)); +#552=IFCINDEXEDPOLYGONALFACE((341,342,336,335)); +#553=IFCINDEXEDPOLYGONALFACE((82,131,61)); +#554=IFCINDEXEDPOLYGONALFACE((290,336,337,305)); +#555=IFCINDEXEDPOLYGONALFACE((109,51,116)); +#556=IFCINDEXEDPOLYGONALFACE((210,29,90)); +#557=IFCINDEXEDPOLYGONALFACE((45,30,21)); +#558=IFCINDEXEDPOLYGONALFACE((204,196,8)); +#559=IFCINDEXEDPOLYGONALFACE((229,238,237)); +#560=IFCINDEXEDPOLYGONALFACE((161,217,160)); +#561=IFCINDEXEDPOLYGONALFACE((305,264,290)); +#562=IFCINDEXEDPOLYGONALFACE((84,60,81)); +#563=IFCINDEXEDPOLYGONALFACE((185,190,184)); +#564=IFCINDEXEDPOLYGONALFACE((5,133,52)); +#565=IFCINDEXEDPOLYGONALFACE((189,187,117)); +#566=IFCINDEXEDPOLYGONALFACE((226,237,238)); +#567=IFCINDEXEDPOLYGONALFACE((23,277,197)); +#568=IFCINDEXEDPOLYGONALFACE((76,8,27)); +#569=IFCINDEXEDPOLYGONALFACE((294,274,295)); +#570=IFCINDEXEDPOLYGONALFACE((145,114,107)); +#571=IFCINDEXEDPOLYGONALFACE((188,44,10)); +#572=IFCINDEXEDPOLYGONALFACE((41,203,85)); +#573=IFCINDEXEDPOLYGONALFACE((13,43,86)); +#574=IFCINDEXEDPOLYGONALFACE((355,364,351,356)); +#575=IFCINDEXEDPOLYGONALFACE((234,125,177)); +#576=IFCINDEXEDPOLYGONALFACE((40,38,50)); +#577=IFCINDEXEDPOLYGONALFACE((272,85,20)); +#578=IFCINDEXEDPOLYGONALFACE((215,48,361)); +#579=IFCINDEXEDPOLYGONALFACE((39,241,301)); +#580=IFCINDEXEDPOLYGONALFACE((311,292,263)); +#581=IFCINDEXEDPOLYGONALFACE((69,86,43)); +#582=IFCINDEXEDPOLYGONALFACE((310,161,178)); +#583=IFCINDEXEDPOLYGONALFACE((202,169,78)); +#584=IFCINDEXEDPOLYGONALFACE((248,250,247)); +#585=IFCINDEXEDPOLYGONALFACE((296,138,360)); +#586=IFCINDEXEDPOLYGONALFACE((42,9,23)); +#587=IFCINDEXEDPOLYGONALFACE((203,206,85)); +#588=IFCINDEXEDPOLYGONALFACE((202,272,169)); +#589=IFCINDEXEDPOLYGONALFACE((342,344,337,336)); +#590=IFCINDEXEDPOLYGONALFACE((129,35,19)); +#591=IFCINDEXEDPOLYGONALFACE((2,162,191)); +#592=IFCINDEXEDPOLYGONALFACE((366,306,98)); +#593=IFCINDEXEDPOLYGONALFACE((361,363,356,354)); +#594=IFCINDEXEDPOLYGONALFACE((68,17,134)); +#595=IFCINDEXEDPOLYGONALFACE((54,173,201)); +#596=IFCINDEXEDPOLYGONALFACE((210,167,151)); +#597=IFCINDEXEDPOLYGONALFACE((156,171,97)); +#598=IFCINDEXEDPOLYGONALFACE((54,151,93)); +#599=IFCINDEXEDPOLYGONALFACE((59,8,196)); +#600=IFCINDEXEDPOLYGONALFACE((213,210,90)); +#601=IFCINDEXEDPOLYGONALFACE((54,371,373)); +#602=IFCINDEXEDPOLYGONALFACE((130,243,209)); +#603=IFCINDEXEDPOLYGONALFACE((359,214,282,280)); +#604=IFCINDEXEDPOLYGONALFACE((142,117,188)); +#605=IFCINDEXEDPOLYGONALFACE((28,367,368)); +#606=IFCINDEXEDPOLYGONALFACE((237,228,229)); +#607=IFCINDEXEDPOLYGONALFACE((362,105,99)); +#608=IFCINDEXEDPOLYGONALFACE((291,314,265)); +#609=IFCINDEXEDPOLYGONALFACE((45,70,18)); +#610=IFCINDEXEDPOLYGONALFACE((210,372,167)); +#611=IFCINDEXEDPOLYGONALFACE((62,63,176)); +#612=IFCINDEXEDPOLYGONALFACE((91,19,35)); +#613=IFCINDEXEDPOLYGONALFACE((206,203,211)); +#614=IFCINDEXEDPOLYGONALFACE((269,260,261)); +#615=IFCINDEXEDPOLYGONALFACE((53,35,129)); +#616=IFCINDEXEDPOLYGONALFACE((54,29,151)); +#617=IFCINDEXEDPOLYGONALFACE((130,368,370)); +#618=IFCINDEXEDPOLYGONALFACE((67,187,189)); +#619=IFCINDEXEDPOLYGONALFACE((371,25,124)); +#620=IFCINDEXEDPOLYGONALFACE((130,209,368)); +#621=IFCINDEXEDPOLYGONALFACE((243,130,370)); +#622=IFCINDEXEDPOLYGONALFACE((213,227,210)); +#623=IFCINDEXEDPOLYGONALFACE((227,372,210)); +#624=IFCINDEXEDPOLYGONALFACE((167,93,151)); +#625=IFCINDEXEDPOLYGONALFACE((372,227,25)); +#626=IFCINDEXEDPOLYGONALFACE((373,29,54)); +#627=IFCINDEXEDPOLYGONALFACE((213,369,227)); +#628=IFCINDEXEDPOLYGONALFACE((371,124,373)); +#629=IFCINDEXEDPOLYGONALFACE((341,348,350,342)); +#630=IFCINDEXEDPOLYGONALFACE((135,66,217)); +#631=IFCINDEXEDPOLYGONALFACE((65,371,33)); +#632=IFCINDEXEDPOLYGONALFACE((350,354,356,351)); +#633=IFCINDEXEDPOLYGONALFACE((333,330,178)); +#634=IFCINDEXEDPOLYGONALFACE((315,254,323)); +#635=IFCINDEXEDPOLYGONALFACE((127,12,30)); +#636=IFCINDEXEDPOLYGONALFACE((100,128,31)); +#637=IFCINDEXEDPOLYGONALFACE((319,5,77)); +#638=IFCINDEXEDPOLYGONALFACE((374,158,2)); +#639=IFCINDEXEDPOLYGONALFACE((375,83,374)); +#640=IFCINDEXEDPOLYGONALFACE((314,274,311)); +#641=IFCINDEXEDPOLYGONALFACE((21,4,52)); +#642=IFCINDEXEDPOLYGONALFACE((288,144,180)); +#643=IFCINDEXEDPOLYGONALFACE((241,137,219)); +#644=IFCINDEXEDPOLYGONALFACE((60,76,45)); +#645=IFCINDEXEDPOLYGONALFACE((10,62,176)); +#646=IFCINDEXEDPOLYGONALFACE((220,147,106)); +#647=IFCINDEXEDPOLYGONALFACE((90,29,373)); +#648=IFCINDEXEDPOLYGONALFACE((70,148,199)); +#649=IFCINDEXEDPOLYGONALFACE((103,37,36)); +#650=IFCINDEXEDPOLYGONALFACE((71,197,306)); +#651=IFCINDEXEDPOLYGONALFACE((117,187,44)); +#652=IFCINDEXEDPOLYGONALFACE((62,44,56)); +#653=IFCINDEXEDPOLYGONALFACE((254,252,244)); +#654=IFCINDEXEDPOLYGONALFACE((59,196,159)); +#655=IFCINDEXEDPOLYGONALFACE((158,141,154)); +#656=IFCINDEXEDPOLYGONALFACE((300,301,241)); +#657=IFCINDEXEDPOLYGONALFACE((23,127,32)); +#658=IFCINDEXEDPOLYGONALFACE((309,303,304)); +#659=IFCINDEXEDPOLYGONALFACE((295,329,304)); +#660=IFCINDEXEDPOLYGONALFACE((369,367,25)); +#661=IFCINDEXEDPOLYGONALFACE((119,102,106)); +#662=IFCINDEXEDPOLYGONALFACE((232,269,318)); +#663=IFCINDEXEDPOLYGONALFACE((208,170,63)); +#664=IFCINDEXEDPOLYGONALFACE((239,97,171)); +#665=IFCINDEXEDPOLYGONALFACE((124,28,213)); +#666=IFCINDEXEDPOLYGONALFACE((268,155,75)); +#667=IFCINDEXEDPOLYGONALFACE((101,270,269)); +#668=IFCINDEXEDPOLYGONALFACE((277,9,7)); +#669=IFCINDEXEDPOLYGONALFACE((320,306,236)); +#670=IFCINDEXEDPOLYGONALFACE((222,193,236)); +#671=IFCINDEXEDPOLYGONALFACE((173,115,50)); +#672=IFCINDEXEDPOLYGONALFACE((299,313,267)); +#673=IFCINDEXEDPOLYGONALFACE((162,207,212)); +#674=IFCINDEXEDPOLYGONALFACE((98,306,197)); +#675=IFCINDEXEDPOLYGONALFACE((295,296,328)); +#676=IFCINDEXEDPOLYGONALFACE((84,81,128)); +#677=IFCINDEXEDPOLYGONALFACE((302,299,297)); +#678=IFCINDEXEDPOLYGONALFACE((212,115,173)); +#679=IFCINDEXEDPOLYGONALFACE((317,323,254)); +#680=IFCINDEXEDPOLYGONALFACE((211,205,204)); +#681=IFCINDEXEDPOLYGONALFACE((39,177,175)); +#682=IFCINDEXEDPOLYGONALFACE((334,263,292)); +#683=IFCINDEXEDPOLYGONALFACE((283,279,286)); +#684=IFCINDEXEDPOLYGONALFACE((129,38,16)); +#685=IFCINDEXEDPOLYGONALFACE((102,349,249)); +#686=IFCINDEXEDPOLYGONALFACE((197,71,12)); +#687=IFCINDEXEDPOLYGONALFACE((330,331,310)); +#688=IFCINDEXEDPOLYGONALFACE((300,308,310)); +#689=IFCINDEXEDPOLYGONALFACE((205,203,190)); +#690=IFCINDEXEDPOLYGONALFACE((133,1,2)); +#691=IFCINDEXEDPOLYGONALFACE((85,206,92)); +#692=IFCINDEXEDPOLYGONALFACE((360,234,39)); +#693=IFCINDEXEDPOLYGONALFACE((122,157,47)); +#694=IFCINDEXEDPOLYGONALFACE((281,280,282)); +#695=IFCINDEXEDPOLYGONALFACE((250,220,249)); +#696=IFCINDEXEDPOLYGONALFACE((58,55,214)); +#697=IFCINDEXEDPOLYGONALFACE((234,360,138)); +#698=IFCINDEXEDPOLYGONALFACE((141,172,298)); +#699=IFCINDEXEDPOLYGONALFACE((27,112,45)); +#700=IFCINDEXEDPOLYGONALFACE((146,182,181)); +#701=IFCINDEXEDPOLYGONALFACE((144,145,181)); +#702=IFCINDEXEDPOLYGONALFACE((195,194,185)); +#703=IFCINDEXEDPOLYGONALFACE((228,221,223)); +#704=IFCINDEXEDPOLYGONALFACE((49,215,358)); +#705=IFCINDEXEDPOLYGONALFACE((74,163,34)); +#706=IFCINDEXEDPOLYGONALFACE((221,72,218)); +#707=IFCINDEXEDPOLYGONALFACE((146,145,107)); +#708=IFCINDEXEDPOLYGONALFACE((194,195,204)); +#709=IFCINDEXEDPOLYGONALFACE((46,123,64)); +#710=IFCINDEXEDPOLYGONALFACE((366,98,86)); +#711=IFCINDEXEDPOLYGONALFACE((48,107,114)); +#712=IFCINDEXEDPOLYGONALFACE((198,104,95)); +#713=IFCINDEXEDPOLYGONALFACE((74,183,132)); +#714=IFCINDEXEDPOLYGONALFACE((21,30,12)); +#715=IFCINDEXEDPOLYGONALFACE((288,150,111)); +#716=IFCINDEXEDPOLYGONALFACE((75,155,225)); +#717=IFCINDEXEDPOLYGONALFACE((166,168,262)); +#718=IFCINDEXEDPOLYGONALFACE((223,119,230)); +#719=IFCINDEXEDPOLYGONALFACE((26,20,92)); +#720=IFCINDEXEDPOLYGONALFACE((219,235,88)); +#721=IFCINDEXEDPOLYGONALFACE((322,264,325)); +#722=IFCINDEXEDPOLYGONALFACE((257,224,220)); +#723=IFCINDEXEDPOLYGONALFACE((289,309,104)); +#724=IFCINDEXEDPOLYGONALFACE((228,146,108)); +#725=IFCINDEXEDPOLYGONALFACE((119,223,218)); +#726=IFCINDEXEDPOLYGONALFACE((367,28,124)); +#727=IFCINDEXEDPOLYGONALFACE((327,324,325)); +#728=IFCINDEXEDPOLYGONALFACE((40,50,115)); +#729=IFCINDEXEDPOLYGONALFACE((321,252,248)); +#730=IFCINDEXEDPOLYGONALFACE((13,86,98)); +#731=IFCINDEXEDPOLYGONALFACE((5,375,374)); +#732=IFCINDEXEDPOLYGONALFACE((135,217,87)); +#733=IFCINDEXEDPOLYGONALFACE((156,147,224)); +#734=IFCINDEXEDPOLYGONALFACE((163,74,63)); +#735=IFCINDEXEDPOLYGONALFACE((56,157,142)); +#736=IFCINDEXEDPOLYGONALFACE((88,190,203)); +#737=IFCINDEXEDPOLYGONALFACE((24,34,163)); +#738=IFCINDEXEDPOLYGONALFACE((14,202,78)); +#739=IFCINDEXEDPOLYGONALFACE((248,252,260)); +#740=IFCINDEXEDPOLYGONALFACE((78,169,26)); +#741=IFCINDEXEDPOLYGONALFACE((16,134,17)); +#742=IFCINDEXEDPOLYGONALFACE((161,160,164)); +#743=IFCINDEXEDPOLYGONALFACE((291,284,287)); +#744=IFCINDEXEDPOLYGONALFACE((127,30,18)); +#745=IFCINDEXEDPOLYGONALFACE((182,192,199)); +#746=IFCINDEXEDPOLYGONALFACE((319,77,71)); +#747=IFCINDEXEDPOLYGONALFACE((225,69,232)); +#748=IFCINDEXEDPOLYGONALFACE((302,303,309)); +#749=IFCINDEXEDPOLYGONALFACE((13,7,36)); +#750=IFCINDEXEDPOLYGONALFACE((308,22,87)); +#751=IFCINDEXEDPOLYGONALFACE((262,139,79)); +#752=IFCINDEXEDPOLYGONALFACE((131,24,73)); +#753=IFCINDEXEDPOLYGONALFACE((370,369,213)); +#754=IFCINDEXEDPOLYGONALFACE((92,206,100)); +#755=IFCINDEXEDPOLYGONALFACE((89,136,233)); +#756=IFCINDEXEDPOLYGONALFACE((332,316,165)); +#757=IFCINDEXEDPOLYGONALFACE((189,122,136)); +#758=IFCINDEXEDPOLYGONALFACE((326,316,332)); +#759=IFCINDEXEDPOLYGONALFACE((117,142,122)); +#760=IFCINDEXEDPOLYGONALFACE((132,134,16)); +#761=IFCINDEXEDPOLYGONALFACE((134,132,183)); +#762=IFCINDEXEDPOLYGONALFACE((239,238,230)); +#763=IFCINDEXEDPOLYGONALFACE((180,181,96)); +#764=IFCINDEXEDPOLYGONALFACE((99,105,113)); +#765=IFCINDEXEDPOLYGONALFACE((22,61,131)); +#766=IFCINDEXEDPOLYGONALFACE((321,247,249)); +#767=IFCINDEXEDPOLYGONALFACE((156,97,120)); +#768=IFCINDEXEDPOLYGONALFACE((148,96,181)); +#769=IFCINDEXEDPOLYGONALFACE((152,125,126)); +#770=IFCINDEXEDPOLYGONALFACE((240,36,37)); +#771=IFCINDEXEDPOLYGONALFACE((14,68,183)); +#772=IFCINDEXEDPOLYGONALFACE((293,296,295)); +#773=IFCINDEXEDPOLYGONALFACE((148,70,112)); +#774=IFCINDEXEDPOLYGONALFACE((313,299,325)); +#775=IFCINDEXEDPOLYGONALFACE((154,66,170)); +#776=IFCINDEXEDPOLYGONALFACE((226,6,123)); +#777=IFCINDEXEDPOLYGONALFACE((349,347,339)); +#778=IFCINDEXEDPOLYGONALFACE((318,315,324)); +#779=IFCINDEXEDPOLYGONALFACE((326,325,299)); +#780=IFCINDEXEDPOLYGONALFACE((112,27,59)); +#781=IFCINDEXEDPOLYGONALFACE((262,168,198)); +#782=IFCINDEXEDPOLYGONALFACE((272,202,51)); +#783=IFCINDEXEDPOLYGONALFACE((318,269,261)); +#784=IFCINDEXEDPOLYGONALFACE((167,65,57)); +#785=IFCINDEXEDPOLYGONALFACE((271,270,266)); +#786=IFCINDEXEDPOLYGONALFACE((218,72,246)); +#787=IFCINDEXEDPOLYGONALFACE((94,149,179)); +#788=IFCINDEXEDPOLYGONALFACE((40,62,153)); +#789=IFCINDEXEDPOLYGONALFACE((8,84,121)); +#790=IFCINDEXEDPOLYGONALFACE((32,18,64)); +#791=IFCINDEXEDPOLYGONALFACE((88,15,109)); +#792=IFCINDEXEDPOLYGONALFACE((133,31,128)); +#793=IFCINDEXEDPOLYGONALFACE((193,79,319)); +#794=IFCINDEXEDPOLYGONALFACE((370,368,367)); +#795=IFCINDEXEDPOLYGONALFACE((6,103,9)); +#796=IFCINDEXEDPOLYGONALFACE((214,55,186)); +#797=IFCINDEXEDPOLYGONALFACE((200,222,75)); +#798=IFCINDEXEDPOLYGONALFACE((375,319,79)); +#799=IFCINDEXEDPOLYGONALFACE((95,104,309)); +#800=IFCINDEXEDPOLYGONALFACE((221,108,49)); +#801=IFCINDEXEDPOLYGONALFACE((36,240,273)); +#802=IFCINDEXEDPOLYGONALFACE((69,225,155)); +#803=IFCINDEXEDPOLYGONALFACE((316,326,302)); +#804=IFCINDEXEDPOLYGONALFACE((297,294,304)); +#805=IFCINDEXEDPOLYGONALFACE((195,179,159)); +#806=IFCINDEXEDPOLYGONALFACE((110,281,186)); +#807=IFCINDEXEDPOLYGONALFACE((323,322,324)); +#808=IFCINDEXEDPOLYGONALFACE((172,141,83)); +#809=IFCINDEXEDPOLYGONALFACE((61,307,219)); +#810=IFCINDEXEDPOLYGONALFACE((283,284,291)); +#811=IFCINDEXEDPOLYGONALFACE((184,235,175)); +#812=IFCINDEXEDPOLYGONALFACE((349,102,246)); +#813=IFCINDEXEDPOLYGONALFACE((174,165,166)); +#814=IFCINDEXEDPOLYGONALFACE((48,105,363)); +#815=IFCINDEXEDPOLYGONALFACE((199,192,237)); +#816=IFCINDEXEDPOLYGONALFACE((164,172,242)); +#817=IFCINDEXEDPOLYGONALFACE((217,66,298)); +#818=IFCINDEXEDPOLYGONALFACE((193,222,200)); +#819=IFCINDEXEDPOLYGONALFACE((253,168,166)); +#820=IFCINDEXEDPOLYGONALFACE((202,14,116)); +#821=IFCINDEXEDPOLYGONALFACE((236,306,366)); +#822=IFCINDEXEDPOLYGONALFACE((170,66,73)); +#823=IFCINDEXEDPOLYGONALFACE((360,300,328)); +#824=IFCINDEXEDPOLYGONALFACE((143,285,110)); +#825=IFCINDEXEDPOLYGONALFACE((252,254,261)); +#826=IFCINDEXEDPOLYGONALFACE((131,109,116)); +#827=IFCINDEXEDPOLYGONALFACE((104,198,168)); +#828=IFCINDEXEDPOLYGONALFACE((126,58,99)); +#829=IFCINDEXEDPOLYGONALFACE((47,67,275)); +#830=IFCINDEXEDPOLYGONALFACE((230,119,120)); +#831=IFCINDEXEDPOLYGONALFACE((67,259,89)); +#832=IFCINDEXEDPOLYGONALFACE((257,256,271)); +#833=IFCINDEXEDPOLYGONALFACE((257,255,231)); +#834=IFCINDEXEDPOLYGONALFACE((316,289,253)); +#835=IFCINDEXEDPOLYGONALFACE((17,26,3)); +#836=IFCINDEXEDPOLYGONALFACE((273,240,171)); +#837=IFCINDEXEDPOLYGONALFACE((362,99,58)); +#838=IFCINDEXEDPOLYGONALFACE((48,49,108)); +#839=IFCINDEXEDPOLYGONALFACE((160,298,172)); +#840=IFCINDEXEDPOLYGONALFACE((190,88,235)); +#841=IFCINDEXEDPOLYGONALFACE((258,270,271)); +#842=IFCINDEXEDPOLYGONALFACE((155,268,366)); +#843=IFCINDEXEDPOLYGONALFACE((169,272,20)); +#844=IFCINDEXEDPOLYGONALFACE((312,332,174)); +#845=IFCINDEXEDPOLYGONALFACE((273,101,43)); +#846=IFCINDEXEDPOLYGONALFACE((264,322,317)); +#847=IFCINDEXEDPOLYGONALFACE((287,138,296)); +#848=IFCINDEXEDPOLYGONALFACE((159,179,149)); +#849=IFCINDEXEDPOLYGONALFACE((267,313,305)); +#850=IFCINDEXEDPOLYGONALFACE((126,111,150)); +#851=IFCINDEXEDPOLYGONALFACE((288,113,114)); +#852=IFCINDEXEDPOLYGONALFACE((266,270,101)); +#853=IFCINDEXEDPOLYGONALFACE((123,6,42)); +#854=IFCINDEXEDPOLYGONALFACE((255,266,171)); +#855=IFCINDEXEDPOLYGONALFACE((34,24,116)); +#856=IFCINDEXEDPOLYGONALFACE((91,35,3)); +#857=IFCINDEXEDPOLYGONALFACE((287,285,143)); +#858=IFCINDEXEDPOLYGONALFACE((77,4,12)); +#859=IFCINDEXEDPOLYGONALFACE((95,333,178)); +#860=IFCINDEXEDPOLYGONALFACE((285,279,280)); +#861=IFCINDEXEDPOLYGONALFACE((242,83,139)); +#862=IFCINDEXEDPOLYGONALFACE((332,312,318)); +#863=IFCINDEXEDPOLYGONALFACE((226,238,239)); +#864=IFCINDEXEDPOLYGONALFACE((175,235,219)); +#865=IFCINDEXEDPOLYGONALFACE((177,152,94)); +#866=IFCINDEXEDPOLYGONALFACE((103,6,226)); +#867=IFCINDEXEDPOLYGONALFACE((372,25,371)); +#868=IFCINDEXEDPOLYGONALFACE((101,232,69)); +#869=IFCINDEXEDPOLYGONALFACE((146,228,192)); +#870=IFCINDEXEDPOLYGONALFACE((52,4,77)); +#871=IFCINDEXEDPOLYGONALFACE((133,81,60)); +#872=IFCINDEXEDPOLYGONALFACE((28,209,243)); +#873=IFCINDEXEDPOLYGONALFACE((110,58,126)); +#874=IFCINDEXEDPOLYGONALFACE((140,142,188)); +#875=IFCINDEXEDPOLYGONALFACE((82,109,131)); +#876=IFCINDEXEDPOLYGONALFACE((109,15,51)); +#877=IFCINDEXEDPOLYGONALFACE((210,151,29)); +#878=IFCINDEXEDPOLYGONALFACE((45,18,30)); +#879=IFCINDEXEDPOLYGONALFACE((204,195,196)); +#880=IFCINDEXEDPOLYGONALFACE((229,230,238)); +#881=IFCINDEXEDPOLYGONALFACE((161,87,217)); +#882=IFCINDEXEDPOLYGONALFACE((305,313,264)); +#883=IFCINDEXEDPOLYGONALFACE((84,76,60)); +#884=IFCINDEXEDPOLYGONALFACE((185,194,190)); +#885=IFCINDEXEDPOLYGONALFACE((5,1,133)); +#886=IFCINDEXEDPOLYGONALFACE((226,46,237)); +#887=IFCINDEXEDPOLYGONALFACE((23,9,277)); +#888=IFCINDEXEDPOLYGONALFACE((76,84,8)); +#889=IFCINDEXEDPOLYGONALFACE((294,267,274)); +#890=IFCINDEXEDPOLYGONALFACE((145,144,114)); +#891=IFCINDEXEDPOLYGONALFACE((41,15,203)); +#892=IFCINDEXEDPOLYGONALFACE((13,11,43)); +#893=IFCINDEXEDPOLYGONALFACE((234,143,125)); +#894=IFCINDEXEDPOLYGONALFACE((40,16,38)); +#895=IFCINDEXEDPOLYGONALFACE((272,41,85)); +#896=IFCINDEXEDPOLYGONALFACE((215,49,48)); +#897=IFCINDEXEDPOLYGONALFACE((39,137,241)); +#898=IFCINDEXEDPOLYGONALFACE((311,274,292)); +#899=IFCINDEXEDPOLYGONALFACE((69,251,86)); +#900=IFCINDEXEDPOLYGONALFACE((310,87,161)); +#901=IFCINDEXEDPOLYGONALFACE((248,256,250)); +#902=IFCINDEXEDPOLYGONALFACE((68,78,17)); +#903=IFCINDEXEDPOLYGONALFACE((156,231,171)); +#904=IFCINDEXEDPOLYGONALFACE((59,27,8)); +#905=IFCINDEXEDPOLYGONALFACE((54,33,371)); +#906=IFCINDEXEDPOLYGONALFACE((237,192,228)); +#907=IFCINDEXEDPOLYGONALFACE((362,363,105)); +#908=IFCINDEXEDPOLYGONALFACE((291,293,314)); +#909=IFCINDEXEDPOLYGONALFACE((45,112,70)); +#910=IFCINDEXEDPOLYGONALFACE((62,40,63)); +#911=IFCINDEXEDPOLYGONALFACE((91,31,19)); +#912=IFCINDEXEDPOLYGONALFACE((269,270,260)); +#913=IFCINDEXEDPOLYGONALFACE((53,3,35)); +#914=IFCINDEXEDPOLYGONALFACE((67,47,187)); +#915=IFCINDEXEDPOLYGONALFACE((135,73,66)); +#916=IFCINDEXEDPOLYGONALFACE((333,329,330)); +#917=IFCINDEXEDPOLYGONALFACE((315,261,254)); +#918=IFCINDEXEDPOLYGONALFACE((127,23,12)); +#919=IFCINDEXEDPOLYGONALFACE((100,121,128)); +#920=IFCINDEXEDPOLYGONALFACE((319,375,5)); +#921=IFCINDEXEDPOLYGONALFACE((374,83,158)); +#922=IFCINDEXEDPOLYGONALFACE((375,139,83)); +#923=IFCINDEXEDPOLYGONALFACE((314,293,274)); +#924=IFCCARTESIANPOINTLIST3D(((-0.0757642686367035,-0.0121694896370173,0.220662087202072),(-0.105255022644997,-0.0141069469973445,0.230906546115875),(-0.164038479328156,-0.0962571799755096,0.263201057910919),(-0.0149683114141226,-0.0434482358396053,0.228664547204971),(-0.0426693223416805,-0.0120228659361601,0.222334340214729),(0.0788992568850517,-0.0767349451780319,0.173714026808739),(0.0953715369105339,-0.0409212671220303,0.16986283659935),(-0.0719772353768349,-0.0949608311057091,0.171763256192207),(0.0735535696148872,-0.0462111458182335,0.199328601360321),(-0.160245850682259,0.0397466160356998,0.298533588647842),(0.106730677187443,-0.0124975387006998,0.138676866889),(0.0139651391655207,-0.0423045344650745,0.229461222887039),(0.0967235639691353,-0.0144418459385633,0.168111309409142),(-0.219927728176117,-0.0414205342531204,0.239053592085838),(-0.198184996843338,-0.0742136090993881,0.172668352723122),(-0.162167191505432,-0.0434498824179173,0.289568781852722),(-0.189809292554855,-0.0716947764158249,0.281713783740997),(0.0152298724278808,-0.0849794447422028,0.205268412828445),(-0.123513199388981,-0.0452961064875126,0.264716774225235),(-0.188629180192947,-0.119135543704033,0.233101561665535),(-0.0130218090489507,-0.0651145428419113,0.222954735159874),(-0.196876853704453,0.0119782146066427,0.138698890805244),(0.0431601963937283,-0.0451620146632195,0.22145189344883),(-0.216075524687767,-0.016599427908659,0.204968154430389),(-0.0582821778953075,0.0224160328507423,0.331800371408463),(-0.190823614597321,-0.102445237338543,0.260164886713028),(-0.0431380830705166,-0.0991964489221573,0.176975786685944),(-0.0522686094045639,0.0494366958737373,0.351232975721359),(-0.0895938724279404,0.0322130136191845,0.318689584732056),(0.013082567602396,-0.0668555349111557,0.223062723875046),(-0.106145963072777,-0.0415130592882633,0.22882467508316),(0.0448657646775246,-0.0776780471205711,0.203667193651199),(-0.10371295362711,-0.00366749544627964,0.314385384321213),(-0.21360756456852,-0.0169711355119944,0.233581200242043),(-0.138989388942719,-0.0749303176999092,0.265050023794174),(0.105769321322441,-0.0415658876299858,0.138697892427444),(0.0992072820663452,-0.0677607133984566,0.138679757714272),(-0.135680645704269,-0.0402409471571445,0.287896603345871),(-0.17496183514595,-0.0425181090831757,0.0743281096220016),(-0.161954745650291,-0.0129314502701163,0.289540559053421),(-0.208628505468369,-0.103418782353401,0.201527774333954),(0.0640031322836876,-0.0677034556865692,0.197900995612144),(0.100172616541386,0.0126537960022688,0.138708665966988),(-0.168615952134132,0.0482185557484627,0.30722576379776),(-0.0140691194683313,-0.0847146064043045,0.205532997846603),(0.0702492073178291,-0.1020467877388,0.138582319021225),(-0.181213811039925,0.0992056727409363,0.328065633773804),(-0.0152021609246731,-0.112156376242638,0.0183885656297207),(0.0162124074995518,-0.111216500401497,0.021827794611454),(-0.133747041225433,-0.0159911345690489,0.290624916553497),(-0.216561943292618,-0.0709330290555954,0.202728658914566),(-0.0427242144942284,-0.0426300838589668,0.222017183899879),(-0.159124106168747,-0.0738818794488907,0.283847242593765),(-0.103956542909145,0.0154779236763716,0.320181280374527),(-0.136982098221779,-0.102321907877922,0.0194435473531485),(-0.183684900403023,0.0396271869540215,0.295159220695496),(-0.107928916811943,-0.010153891518712,0.291135489940643),(-0.103886745870113,-0.101836994290352,0.0180104468017817),(-0.0461161360144615,-0.119219377636909,0.138967230916023),(-0.0461340732872486,-0.061420276761055,0.21500451862812),(-0.211329713463783,-0.0169732719659805,0.138692498207092),(-0.165825873613358,0.0170033983886242,0.294365167617798),(-0.162926822900772,0.0167535953223705,0.259086668491364),(0.044605728238821,-0.0985531806945801,0.171382486820221),(-0.0834082290530205,0.00335463741794229,0.315553486347198),(-0.15971240401268,0.0247225016355515,0.197611734271049),(-0.16489240527153,0.105032727122307,0.322820842266083),(-0.215148985385895,-0.0462404675781727,0.266269713640213),(0.074162483215332,0.0414574705064297,0.138786911964417),(0.0142031144350767,-0.105447888374329,0.170478105545044),(0.0141690038144588,-0.0131895141676068,0.229208543896675),(0.0433205515146255,-0.101634204387665,0.0178499221801758),(-0.194831639528275,0.00855887122452259,0.19867131114006),(-0.190071240067482,0.00837886054068804,0.263859361410141),(0.0146396514028311,0.0503562577068806,0.171330958604813),(-0.0466328002512455,-0.0789417400956154,0.203323245048523),(-0.0142267476767302,-0.0157651714980602,0.22864143550396),(-0.214272990822792,-0.0700500085949898,0.258544147014618),(-0.0187377445399761,0.0234869290143251,0.211539566516876),(-0.169090524315834,0.130419373512268,0.343455374240875),(-0.0730840340256691,-0.0585213899612427,0.211252138018608),(-0.211533859372139,-0.0429056100547314,0.138715773820877),(-0.0739177912473679,0.0154376216232777,0.210008263587952),(-0.07377789914608,-0.0735882744193077,0.200627535581589),(-0.186267927289009,-0.121167339384556,0.205986142158508),(0.0892870724201202,0.0163372419774532,0.167569145560265),(-0.163796290755272,0.0387952998280525,0.138641089200974),(-0.197594255208969,-0.07469642162323,0.138668864965439),(-0.157580107450485,0.132616892457008,0.328512966632843),(-0.0735077708959579,0.0393004417419434,0.326341509819031),(-0.133432641625404,-0.0800390690565109,0.240147277712822),(-0.161642774939537,-0.107512913644314,0.235317841172218),(-0.103187024593353,0.0151489116251469,0.293316811323166),(-0.131257891654968,-0.0962524563074112,0.0883080363273621),(-0.0977480411529541,0.0540151223540306,0.138882651925087),(-0.015323237515986,-0.12871652841568,0.138334348797798),(0.102820813655853,-0.0720862969756126,0.0782168358564377),(0.0691742300987244,0.00961552746593952,0.196848139166832),(-0.0784864947199821,-0.104707300662994,0.0244421008974314),(-0.129387423396111,-0.0837726294994354,0.201711267232895),(0.10028512775898,0.0147631969302893,0.106750056147575),(0.0725274235010147,-0.0733503252267838,0.0162904672324657),(0.0907945036888123,-0.0631996393203735,0.166820541024208),(-0.0685850381851196,0.0688069462776184,0.138255223631859),(-0.0430277064442635,-0.107757613062859,0.022122398018837),(0.102449595928192,-0.0650743395090103,0.0278087817132473),(-0.0123228346928954,-0.128916323184967,0.0516869872808456),(0.0133168455213308,-0.126367673277855,0.0497013293206692),(-0.211436733603477,-0.0425778105854988,0.171008050441742),(-0.135128378868103,-0.0737440511584282,0.028781833127141),(-0.0713493376970291,-0.0974928066134453,0.048680767416954),(-0.0144545361399651,-0.10740352421999,0.169533520936966),(-0.0520200654864311,-0.106458351016045,0.0468626022338867),(-0.0383422300219536,-0.121899470686913,0.0537898242473602),(-0.135303497314453,0.00472360569983721,0.269406676292419),(-0.222012773156166,-0.0435851588845253,0.201951056718826),(-0.150152832269669,0.0706916153430939,0.296226799488068),(-0.205232128500938,-0.0530128739774227,0.172492980957031),(0.0815067514777184,-0.0842671692371368,0.0463023483753204),(0.101917430758476,-0.0744422674179077,0.0511590167880058),(-0.104162633419037,-0.0769466981291771,0.197300210595131),(-0.165175527334213,0.100392691791058,0.295828104019165),(0.0624474883079529,-0.0914158597588539,0.172223627567291),(-0.0696270391345024,0.0371879562735558,0.345104366540909),(-0.129096910357475,-0.0715842396020889,0.0532362163066864),(-0.102229714393616,-0.0918472409248352,0.0500270053744316),(0.0328243598341942,-0.0628630220890045,0.219847500324249),(-0.0929397568106651,-0.0598123446106911,0.212814390659332),(-0.140351414680481,-0.0651696026325226,0.281688511371613),(-0.0299176927655935,0.0646412074565887,0.345614969730377),(-0.210334226489067,-0.019161444157362,0.170468419790268),(-0.189835593104362,-0.0147899463772774,0.284663945436478),(-0.0706062465906143,-0.0353134833276272,0.219783633947372),(-0.196250692009926,-0.0419037826359272,0.286000579595566),(-0.189289301633835,0.015417193993926,0.167268991470337),(-0.165491297841072,0.119253136217594,0.309156060218811),(-0.188711583614349,-0.0422543436288834,0.0857931450009346),(-0.137549817562103,-0.0175594426691532,0.048555850982666),(-0.0439321398735046,0.0188035927712917,0.209587976336479),(-0.166142821311951,0.0438390895724297,0.269286632537842),(-0.100659042596817,0.0212050415575504,0.210695147514343),(-0.165524810552597,0.0681574642658234,0.275103896856308),(-0.131917878985405,-0.0432314537465572,0.0469778589904308),(-0.0393056124448776,-0.127956256270409,0.0805243328213692),(-0.0148295955732465,-0.134464859962463,0.078124076128006),(0.0156515818089247,-0.132012516260147,0.0775675550103188),(0.128680378198624,-0.0638554841279984,0.0486980155110359),(0.011726126074791,-0.12689021229744,0.138521879911423),(-0.104669205844402,-0.0973712056875229,0.0786209478974342),(-0.0722803771495819,-0.0994613841176033,0.0782437026500702),(-0.0900976955890656,0.0289249792695045,0.304527103900909),(-0.131665915250778,-0.0805337652564049,0.0729337483644485),(-0.17888680100441,0.0127522293478251,0.288278430700302),(-0.131906762719154,0.0216084867715836,0.211986422538757),(0.0438910871744156,0.0446652211248875,0.170035198330879),(0.126842275261879,-0.0620891898870468,0.0720244571566582),(-0.181458547711372,0.0720020085573196,0.30515855550766),(-0.105359517037868,0.0106867477297783,0.222205132246017),(-0.0755681917071342,-0.105624243617058,0.10775239020586),(-0.130771055817604,0.0436740666627884,0.171749204397202),(-0.133024662733078,0.049973726272583,0.138679206371307),(-0.11655567586422,-0.016352504491806,0.262825727462769),(-0.192813113331795,0.00962049700319767,0.228011801838875),(-0.0995994955301285,0.0463632792234421,0.169919461011887),(-0.0153328543528914,0.07756557315588,0.138280719518661),(-0.0149811441078782,0.0544508099555969,0.170514196157455),(-0.0777326822280884,0.0189591310918331,0.297642737627029),(-0.0429378487169743,0.0526389256119728,0.171193689107895),(-0.210668057203293,-0.0934961810708046,0.245899826288223),(-0.162400558590889,0.0198477655649185,0.223333954811096),(0.112556174397469,-0.0415905937552452,0.087884321808815),(-0.0984991043806076,0.0341813936829567,0.19681504368782),(-0.125417664647102,0.00907643139362335,0.292186677455902),(0.0127286352217197,0.0715995132923126,0.138794869184494),(-0.184464573860168,-0.063567191362381,0.0917578190565109),(-0.159845903515816,0.0349735803902149,0.277037382125854),(-0.163954228162766,-0.073273241519928,0.079649306833744),(-0.130220845341682,0.0479081235826015,0.111017473042011),(-0.105627626180649,-0.103251308202744,0.104907594621181),(-0.0447412990033627,-0.130966305732727,0.105820834636688),(-0.0145897325128317,-0.137667417526245,0.107010833919048),(0.0177259147167206,-0.133680522441864,0.11051332205534),(-0.20410780608654,-0.015498636290431,0.265768945217133),(-0.163662612438202,-0.0963144749403,0.108248025178909),(-0.133774682879448,-0.102946348488331,0.108776144683361),(-0.152653515338898,-0.093793697655201,0.0112244309857488),(-0.169374197721481,0.0769077241420746,0.31595915555954),(-0.15337011218071,0.0495448186993599,0.289855599403381),(-0.14865180850029,0.0935175195336342,0.306516766548157),(-0.163774311542511,-0.100279614329338,0.138708546757698),(-0.114786863327026,-0.0349755696952343,0.251059830188751),(0.0435214228928089,-0.123003117740154,0.107089169323444),(0.0122568001970649,0.0234032459557056,0.212896287441254),(-0.132915586233139,-0.105148307979107,0.138666361570358),(-0.103796437382698,-0.10418801009655,0.13867013156414),(-0.0721595510840416,-0.1059859842062,0.138681977987289),(0.0412953048944473,-0.0123581402003765,0.221496060490608),(-0.0697300583124161,0.0507166534662247,0.170578330755234),(0.0441036224365234,-0.114852353930473,0.138935402035713),(-0.0128488391637802,0.0388977639377117,0.196252673864365),(-0.124916173517704,-0.00659546442329884,0.306106418371201),(-0.218161851167679,-0.071009561419487,0.230814844369888),(-0.163197606801987,-0.0973011329770088,0.173606932163239),(-0.106259688735008,-0.0960564464330673,0.167294099926949),(-0.134439319372177,-0.0996981337666512,0.164969086647034),(-0.160570159554482,-0.110724151134491,0.202919006347656),(-0.120365753769875,-0.00549432123079896,0.253050655126572),(-0.133883744478226,0.0106024611741304,0.23326064646244),(-0.0365464128553867,0.062771737575531,0.351498425006866),(-0.0698662772774696,0.0357129909098148,0.305281817913055),(-0.135447904467583,-0.0874549821019173,0.184239640831947),(-0.112891294062138,0.00657996907830238,0.271908432245255),(-0.0499069318175316,0.0498133301734924,0.325594484806061),(-0.135738432407379,-0.100006818771362,-7.45058059692383E-09),(0.0123523958027363,-0.101531967520714,-7.45058059692383E-09),(-0.102930329740047,-0.0987276136875153,-7.45058059692383E-09),(-0.158383101224899,0.0353976972401142,0.167762398719788),(0.0585155189037323,-0.0887269079685211,0.0169257298111916),(-0.202236160635948,-0.0440891794860363,0.107780121266842),(0.12652799487114,-0.0424845181405544,0.0317913927137852),(0.0445115864276886,-0.111490845680237,0.0452388003468513),(0.0178857706487179,0.0359265469014645,0.199328750371933),(0.0685334727168083,-0.0978689268231392,0.0533365905284882),(0.138488471508026,-0.0432419404387474,0.0493728704750538),(0.0406565591692924,0.062880277633667,0.138536900281906),(0.0871811881661415,-0.0870387107133865,0.138694822788239),(-0.0505233928561211,0.0300182458013296,0.313426643610001),(0.0435324311256409,-0.119963906705379,0.0792121887207031),(0.0723142325878143,-0.100660108029842,0.0801471099257469),(0.0880676060914993,-0.086207315325737,0.078484445810318),(0.136276960372925,-0.0405644066631794,0.078633114695549),(0.0735301449894905,0.0462804175913334,0.10518267005682),(-0.180783584713936,0.120272636413574,0.33598318696022),(-0.155802026391029,-0.042164009064436,0.0622472763061523),(-0.192451253533363,-0.0732510983943939,0.112686090171337),(0.0313579067587852,0.0240139346569777,0.208784699440002),(0.0728883668780327,-0.103513494133949,0.107350297272205),(0.0885002017021179,-0.0885679498314857,0.105739302933216),(0.100790202617645,-0.0713259652256966,0.10683286935091),(0.109439946711063,-0.0426978133618832,0.107300646603107),(-0.18864569067955,-0.0167884975671768,0.0867345333099365),(-0.0709428116679192,0.0352016389369965,0.19365206360817),(-0.0357190407812595,0.0615072995424271,0.335724234580994),(0.0447911284863949,0.0144118629395962,-7.45058059692383E-09),(0.0369860865175724,0.0369828194379807,-7.45058059692383E-09),(0.0461129434406757,-0.0748821049928665,-7.45058059692383E-09),(0.104031659662724,-0.0135611081495881,0.0148804550990462),(0.0986066535115242,0.0066530667245388,0.0271508432924747),(0.103960558772087,-0.0420542061328888,0.0150693515315652),(0.121874935925007,-0.0147962821647525,0.0282622296363115),(0.0696230307221413,0.0340555869042873,0.168976783752441),(0.0729203075170517,0.015480482019484,0.0226278305053711),(-0.0445376336574554,0.0741409137845039,0.139188349246979),(0.046685803681612,0.0460076108574867,0.0192816369235516),(0.132462680339813,-0.0147683853283525,0.079218864440918),(0.123972199857235,0.00519884005188942,0.0471794344484806),(0.13483801484108,-0.0135693158954382,0.0477543026208878),(0.101557418704033,0.0150842368602753,0.0500984787940979),(-0.151446789503098,0.125798091292381,0.318272113800049),(0.0826703608036041,0.023927254602313,0.0464257299900055),(0.0693408101797104,0.0435765013098717,0.0500893704593182),(-0.0420871675014496,0.0380131863057613,0.193471923470497),(-0.0971032008528709,0.0616641864180565,-7.45058059692383E-09),(-0.0130963791161776,0.064698226749897,0.0197515171021223),(-0.157119512557983,0.00803167372941971,-7.45058059692383E-09),(0.113602519035339,-0.0132037419825792,0.0879008769989014),(-0.069912314414978,0.066078893840313,0.0191369466483593),(0.0389328189194202,0.0351467467844486,0.194373697042465),(0.0768988505005836,0.0420413166284561,0.0788332372903824),(0.10157422721386,0.0134498169645667,0.0773250162601471),(0.123080961406231,0.00395354814827442,0.0694246292114258),(-0.211960434913635,-0.102200835943222,0.224356546998024),(0.110181555151939,-0.0136255938559771,0.109196342527866),(-0.102282598614693,0.0414383597671986,0.019612405449152),(-0.172445297241211,0.11539913713932,0.340771019458771),(-0.181048646569252,0.112369157373905,0.34296378493309),(0.0725264996290207,-0.0152853392064571,0.200319215655327),(-0.183978870511055,0.0709394812583923,0.317676812410355),(-0.153028383851051,-0.0384657420217991,-7.45058059692383E-09),(-0.154637187719345,-0.0691222250461578,-7.45058059692383E-09),(-0.152765303850174,-0.0738510563969612,0.015262059867382),(-0.153248697519302,-0.0919284746050835,-7.45058059692383E-09),(-0.16192090511322,-0.0145302480086684,-7.45058059692383E-09),(-0.161076262593269,-0.0149271814152598,0.0173035766929388),(-0.139386385679245,-0.0480194091796875,0.0201432537287474),(-0.15407682955265,-0.0336258858442307,0.0154564278200269),(-0.141747921705246,-0.0158547051250935,0.0288874395191669),(-0.0563743449747562,-0.108996540307999,0.0737379342317581),(-0.0461691729724407,0.0890766233205795,0.110146202147007),(-0.0146415047347546,0.0512426868081093,-7.45058059692383E-09),(-0.156508177518845,0.00872325897216797,0.0127747664228082),(-0.0932494476437569,0.0622886717319489,0.0157215017825365),(-0.134241998195648,0.0180515833199024,0.0220324043184519),(-0.0754619538784027,0.0455531552433968,0.0509162880480289),(-0.103701874613762,0.0273517612367868,0.0517874732613564),(-0.131066977977753,0.0115249017253518,0.0524038933217525),(-0.062931016087532,0.0692232176661491,0.0536416172981262),(-0.132335588335991,0.0322872921824455,0.19751612842083),(-0.0452888980507851,0.0760203972458839,0.0472172982990742),(-0.163926124572754,0.0142420912161469,0.0823174566030502),(-0.174691706895828,-0.0135900285094976,0.0736509189009666),(-0.0486402213573456,0.0849898308515549,0.0788175389170647),(-0.0689510703086853,0.0702485665678978,0.0784279331564903),(-0.0810153111815453,0.0491584502160549,0.0748984813690186),(-0.0429749675095081,0.0617619827389717,-7.45058059692383E-09),(0.0349937379360199,0.00642204098403454,0.219141826033592),(-0.202323064208031,-0.0122631303966045,0.109208643436432),(-0.188646167516708,0.0148954978212714,0.108683586120605),(-0.0744052901864052,0.0735662579536438,0.106222227215767),(-0.161729156970978,0.0381991006433964,0.108166508376598),(-0.104008600115776,0.0453929454088211,-7.45058059692383E-09),(0.0388389863073826,0.0702219158411026,0.10972835123539),(-0.0412575826048851,0.0688836574554443,0.0204634200781584),(-0.132600158452988,0.0162683837115765,-7.45058059692383E-09),(0.0419384241104126,0.0643723532557487,0.0487342029809952),(-0.0230755694210529,0.0902970731258392,0.106796741485596),(0.0122685618698597,0.0503091886639595,-7.45058059692383E-09),(0.0420029424130917,0.0680971890687943,0.0789963230490685),(-0.0132175851613283,0.00625489093363285,0.222308561205864),(0.0146723045036197,0.00723757036030293,0.223271667957306),(0.0720149055123329,-0.0120490025728941,0.00231547281146049),(0.013688700273633,0.0642379224300385,0.0262222941964865),(0.033619936555624,0.0599825419485569,0.0301631242036819),(0.0156846102327108,0.0726122707128525,0.0497567467391491),(-0.0139973452314734,0.0766579210758209,0.0474896989762783),(-0.0166601836681366,0.0857705846428871,0.0790435597300529),(0.0127416122704744,0.0787845030426979,0.0776184424757957),(-0.137325063347816,0.0222998633980751,0.0709470063447952),(-0.103061355650425,0.0392319709062576,0.082869827747345),(-0.133015736937523,0.0387391112744808,0.0904415026307106),(-0.151931047439575,0.0321191623806953,0.0878717452287674),(0.0125869233161211,0.0806632563471794,0.105742789804935),(-0.0995742082595825,0.049370177090168,0.106232292950153),(-0.0746603757143021,0.0656085163354874,-7.45058059692383E-09),(0.0122953318059444,0.017735980451107,-7.45058059692383E-09),(-0.0146934473887086,0.0262711010873318,-7.45058059692383E-09),(-0.0429374538362026,0.0298651698976755,-7.45058059692383E-09),(-0.103215932846069,0.0137835666537285,-7.45058059692383E-09),(0.0444422401487827,-0.0129836350679398,-7.45058059692383E-09),(-0.0746518895030022,0.0316607765853405,-7.45058059692383E-09),(0.0123018361628056,-0.0127876792103052,-7.45058059692383E-09),(-0.0147215090692043,-0.0133242877200246,-7.45058059692383E-09),(-0.101430043578148,-0.0147481001913548,-7.45058059692383E-09),(-0.0429213680326939,-0.0151002155616879,-7.45058059692383E-09),(-0.132630944252014,-0.0134387537837029,-7.45058059692383E-09),(-0.0746475011110306,-0.0111579261720181,-7.45058059692383E-09),(0.0461949594318867,-0.0483818538486958,-7.45058059692383E-09),(0.0123028568923473,-0.0431565642356873,-7.45058059692383E-09),(0.0676943361759186,-0.0439984127879143,0.00213921279646456),(-0.0147214606404305,-0.0419304519891739,-7.45058059692383E-09),(-0.0429213680326939,-0.0426230616867542,-7.45058059692383E-09),(-0.134391859173775,-0.0420995727181435,-7.45058059692383E-09),(0.0123003236949444,-0.0714240521192551,-7.45058059692383E-09),(-0.0147217661142349,-0.0719940662384033,-7.45058059692383E-09),(-0.0746477097272873,-0.0698381289839745,-7.45058059692383E-09),(-0.0429213680326939,-0.0721928924322128,-7.45058059692383E-09),(-0.101144231855869,-0.0718697011470795,-7.45058059692383E-09),(0.0347950644791126,-0.096686989068985,-7.45058059692383E-09),(-0.132067084312439,-0.0720017328858376,-7.45058059692383E-09),(-0.159548789262772,-0.0125050684437156,0.0618688985705376),(-0.0169071108102798,-0.107485927641392,-7.45058059692383E-09),(-0.0746394321322441,-0.103576719760895,-7.45058059692383E-09),(-0.0428757518529892,-0.105996340513229,-7.45058059692383E-09),(-0.0746474862098694,-0.0418127365410328,-7.45058059692383E-09),(-0.101288944482803,-0.0456511229276657,-7.45058059692383E-09),(0.061871238052845,0.0245271548628807,0.191577181220055),(-0.0470216795802116,0.0414715930819511,0.344332307577133),(-0.0351001992821693,0.0582603961229324,0.352131396532059),(-0.043320570141077,0.0422725304961205,0.325726985931396),(-0.0332878455519676,0.056865319609642,0.334871053695679),(-0.0782285928726196,0.010980136692524,0.334277510643005),(-0.0612197890877724,0.0185103937983513,0.30783212184906),(-0.0876919776201248,0.0268637835979462,0.333815038204193),(-0.0750949084758759,-0.00158989988267422,0.21651217341423),(-0.0432584583759308,0.000724630663171411,0.217384174466133)),$); +#925=IFCPOLYGONALFACESET(#924,.F.,(#211,#212,#213,#214,#215,#216,#217,#218,#219,#220,#221,#222,#223,#224,#225,#226,#227,#228,#229,#230,#231,#232,#233,#234,#235,#236,#237,#238,#239,#240,#241,#242,#243,#244,#245,#246,#247,#248,#249,#250,#251,#252,#253,#254,#255,#256,#257,#258,#259,#260,#261,#262,#263,#264,#265,#266,#267,#268,#269,#270,#271,#272,#273,#274,#275,#276,#277,#278,#279,#280,#281,#282,#283,#284,#285,#286,#287,#288,#289,#290,#291,#292,#293,#294,#295,#296,#297,#298,#299,#300,#301,#302,#303,#304,#305,#306,#307,#308,#309,#310,#311,#312,#313,#314,#315,#316,#317,#318,#319,#320,#321,#322,#323,#324,#325,#326,#327,#328,#329,#330,#331,#332,#333,#334,#335,#336,#337,#338,#339,#340,#341,#342,#343,#344,#345,#346,#347,#348,#349,#350,#351,#352,#353,#354,#355,#356,#357,#358,#359,#360,#361,#362,#363,#364,#365,#366,#367,#368,#369,#370,#371,#372,#373,#374,#375,#376,#377,#378,#379,#380,#381,#382,#383,#384,#385,#386,#387,#388,#389,#390,#391,#392,#393,#394,#395,#396,#397,#398,#399,#400,#401,#402,#403,#404,#405,#406,#407,#408,#409,#410,#411,#412,#413,#414,#415,#416,#417,#418,#419,#420,#421,#422,#423,#424,#425,#426,#427,#428,#429,#430,#431,#432,#433,#434,#435,#436,#437,#438,#439,#440,#441,#442,#443,#444,#445,#446,#447,#448,#449,#450,#451,#452,#453,#454,#455,#456,#457,#458,#459,#460,#461,#462,#463,#464,#465,#466,#467,#468,#469,#470,#471,#472,#473,#474,#475,#476,#477,#478,#479,#480,#481,#482,#483,#484,#485,#486,#487,#488,#489,#490,#491,#492,#493,#494,#495,#496,#497,#498,#499,#500,#501,#502,#503,#504,#505,#506,#507,#508,#509,#510,#511,#512,#513,#514,#515,#516,#517,#518,#519,#520,#521,#522,#523,#524,#525,#526,#527,#528,#529,#530,#531,#532,#533,#534,#535,#536,#537,#538,#539,#540,#541,#542,#543,#544,#545,#546,#547,#548,#549,#550,#551,#552,#553,#554,#555,#556,#557,#558,#559,#560,#561,#562,#563,#564,#565,#566,#567,#568,#569,#570,#571,#572,#573,#574,#575,#576,#577,#578,#579,#580,#581,#582,#583,#584,#585,#586,#587,#588,#589,#590,#591,#592,#593,#594,#595,#596,#597,#598,#599,#600,#601,#602,#603,#604,#605,#606,#607,#608,#609,#610,#611,#612,#613,#614,#615,#616,#617,#618,#619,#620,#621,#622,#623,#624,#625,#626,#627,#628,#629,#630,#631,#632,#633,#634,#635,#636,#637,#638,#639,#640,#641,#642,#643,#644,#645,#646,#647,#648,#649,#650,#651,#652,#653,#654,#655,#656,#657,#658,#659,#660,#661,#662,#663,#664,#665,#666,#667,#668,#669,#670,#671,#672,#673,#674,#675,#676,#677,#678,#679,#680,#681,#682,#683,#684,#685,#686,#687,#688,#689,#690,#691,#692,#693,#694,#695,#696,#697,#698,#699,#700,#701,#702,#703,#704,#705,#706,#707,#708,#709,#710,#711,#712,#713,#714,#715,#716,#717,#718,#719,#720,#721,#722,#723,#724,#725,#726,#727,#728,#729,#730,#731,#732,#733,#734,#735,#736,#737,#738,#739,#740,#741,#742,#743,#744,#745,#746,#747,#748,#749,#750,#751,#752,#753,#754,#755,#756,#757,#758,#759,#760,#761,#762,#763,#764,#765,#766,#767,#768,#769,#770,#771,#772,#773,#774,#775,#776,#777,#778,#779,#780,#781,#782,#783,#784,#785,#786,#787,#788,#789,#790,#791,#792,#793,#794,#795,#796,#797,#798,#799,#800,#801,#802,#803,#804,#805,#806,#807,#808,#809,#810,#811,#812,#813,#814,#815,#816,#817,#818,#819,#820,#821,#822,#823,#824,#825,#826,#827,#828,#829,#830,#831,#832,#833,#834,#835,#836,#837,#838,#839,#840,#841,#842,#843,#844,#845,#846,#847,#848,#849,#850,#851,#852,#853,#854,#855,#856,#857,#858,#859,#860,#861,#862,#863,#864,#865,#866,#867,#868,#869,#870,#871,#872,#873,#874,#875,#876,#877,#878,#879,#880,#881,#882,#883,#884,#885,#886,#887,#888,#889,#890,#891,#892,#893,#894,#895,#896,#897,#898,#899,#900,#901,#902,#903,#904,#905,#906,#907,#908,#909,#910,#911,#912,#913,#914,#915,#916,#917,#918,#919,#920,#921,#922,#923),$); +#926=IFCSHAPEREPRESENTATION(#17,'Body','Tessellation',(#925)); +#927=IFCCARTESIANPOINT((0.,0.,0.)); +#928=IFCDIRECTION((1.,0.,0.)); +#929=IFCDIRECTION((0.,0.,1.)); +#930=IFCAXIS2PLACEMENT3D(#927,#929,#928); +#931=IFCREPRESENTATIONMAP(#930,#926); +#932=IFCCARTESIANPOINTLIST2D(((-0.161386370658875,0.000390071421861649),(-0.16297847032547,0.0306398719549179),(-0.152914509177208,0.0576198659837246),(-0.148716494441032,0.0795774236321449),(-0.149392008781433,0.102066904306412),(-0.15144681930542,0.125798091292381),(-0.157580137252808,0.132616892457008),(-0.169090509414673,0.130419373512268),(-0.180844187736511,0.118465758860111),(-0.182052731513977,0.0906300097703934),(-0.183831930160522,0.0552833341062069),(-0.183684945106506,0.0396271869540215),(-0.192724362015724,-0.00467484071850777)),$); +#933=IFCINDEXEDPOLYCURVE(#932,$,$); +#934=IFCCARTESIANPOINTLIST2D(((-0.173348978161812,0.0203548446297646),(-0.16315957903862,0.0617493018507957),(-0.157428041100502,0.0974122136831284),(-0.165070101618767,0.119064696133137)),$); +#935=IFCINDEXEDPOLYCURVE(#934,$,$); +#936=IFCCARTESIANPOINTLIST2D(((-0.160456106066704,0.03740194439888),(-0.130220890045166,0.0479081235826015),(-0.0977480411529541,0.0540151223540306),(-0.074405312538147,0.0735662579536438),(-0.0373027324676514,0.0895451977849007),(-0.00524431467056274,0.0854801684617996),(0.0449999570846558,0.0689153224229813),(0.0768988728523254,0.0420413166284561),(0.100000023841858,0.0200000032782555),(0.112531423568726,-0.0134119689464569),(0.11093932390213,-0.0415389761328697),(0.101917445659637,-0.0744422599673271),(0.128680348396301,-0.0638554915785789),(0.138488471508026,-0.0432419404387474),(0.134837985038757,-0.0135693177580833),(0.123972177505493,0.00519884377717972),(0.100000023841858,0.0200000032782555)),$); +#937=IFCINDEXEDPOLYCURVE(#936,$,$); +#938=IFCCARTESIANPOINTLIST2D(((-0.0413289070129395,0.0605994611978531),(-0.0554808378219604,0.0468897596001625),(-0.0780355930328369,0.0367180481553078),(-0.0992635488510132,0.0185858532786369),(-0.136412382125854,0.00443390011787415)),$); +#939=IFCINDEXEDPOLYCURVE(#938,$,$); +#940=IFCCARTESIANPOINTLIST2D(((-0.14391028881073,0.00847188383340836),(-0.127020835876465,0.0233357548713684),(-0.0995742082595825,0.049370177090168),(-0.0685850381851196,0.0688069462776184),(-0.0296431183815002,0.0763391554355621),(-0.0267347097396851,0.07121342420578),(-0.0338107347488403,0.0583882182836533),(-0.0585765838623047,0.0190281048417091),(-0.103685975074768,-0.00794906169176102),(-0.130663156509399,-0.0145827829837799)),$); +#941=IFCINDEXEDPOLYCURVE(#940,$,$); +#942=IFCCARTESIANPOINTLIST2D(((0.101917445659637,-0.0744422599673271),(0.0776327848434448,-0.0989715680480003),(0.0435214042663574,-0.123003117740154),(-0.00187504291534424,-0.136098772287369),(-0.0447412729263306,-0.130966305732727),(-0.0755681991577148,-0.105624251067638),(-0.114447318017483,-0.103237792849541),(-0.148344993591309,-0.102713964879513),(-0.129387378692627,-0.0837726220488548),(-0.112089991569519,-0.0523208752274513)),$); +#943=IFCINDEXEDPOLYCURVE(#942,$,$); +#944=IFCCARTESIANPOINTLIST2D(((-0.148344993591309,-0.102713964879513),(-0.16057014465332,-0.11072414368391),(-0.187541648745537,-0.117346309125423),(-0.205768346786499,-0.106695257127285),(-0.214284062385559,-0.0905132815241814),(-0.222012758255005,-0.0435851588845253),(-0.217635273933411,-0.0236888602375984),(-0.189349979162216,0.0118629187345505)),$); +#945=IFCINDEXEDPOLYCURVE(#944,$,$); +#946=IFCGEOMETRICCURVESET((#933,#935,#937,#939,#941,#943,#945)); +#947=IFCSHAPEREPRESENTATION(#18,'Body','Annotation2D',(#946)); +#948=IFCCARTESIANPOINT((0.,0.,0.)); +#949=IFCDIRECTION((1.,0.,0.)); +#950=IFCDIRECTION((0.,0.,1.)); +#951=IFCAXIS2PLACEMENT3D(#948,#950,#949); +#952=IFCREPRESENTATIONMAP(#951,#947); +#953=IFCTYPEPRODUCT('0UrP0fLdD5OwzwD41aRKao',$,'SETOUT-POINT',$,'IfcAnnotation/SYMBOL',(#954),$,$); +#954=IFCPROPERTYSET('27lmSbeAXC08EWkEq8XdUG',$,'EPset_Annotation',$,(#955)); +#955=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('setout-point'),$); +#956=IFCTYPEPRODUCT('3IQrQOSFP0WfkuLk0ak7_0',$,'CONTROL-POINT',$,'IfcAnnotation/SYMBOL',(#957),$,$); +#957=IFCPROPERTYSET('23aN9DsdjFcfWq8KGSIVoN',$,'EPset_Annotation',$,(#958)); +#958=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('control-point'),$); +#959=IFCTYPEPRODUCT('3wvbaiaIz8agQgDRzt01vz',$,'TRAVERSE-POINT',$,'IfcAnnotation/SYMBOL',(#960),$,$); +#960=IFCPROPERTYSET('1j7aFM1Rb9BRuKgUEn1U10',$,'EPset_Annotation',$,(#961)); +#961=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('traverse-point'),$); +#962=IFCTYPEPRODUCT('0p5ZTfTnX9ZOywroa7Ffql',$,'DASHED',$,'IfcAnnotation/LINEWORK',(#963),$,$); +#963=IFCPROPERTYSET('27smSHyiv39vhBRSwfDVCD',$,'EPset_Annotation',$,(#964)); +#964=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('dashed'),$); +#965=IFCTYPEPRODUCT('2EvrG9Vuf6t9etgMeWFuJ2',$,'FINE',$,'IfcAnnotation/LINEWORK',(#966),$,$); +#966=IFCPROPERTYSET('0gVTuDcZ5ByRdR3sZnEZUR',$,'EPset_Annotation',$,(#967)); +#967=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('fine'),$); +#968=IFCTYPEPRODUCT('0IeM1ywXn1qhR_6NhB6N4s',$,'THIN',$,'IfcAnnotation/LINEWORK',(#969),$,$); +#969=IFCPROPERTYSET('0t6c$uCeT9092GYkbm8hDS',$,'EPset_Annotation',$,(#970)); +#970=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('thin'),$); +#971=IFCTYPEPRODUCT('1jZVbCwrTCGhZdKbH4uqTP',$,'MEDIUM',$,'IfcAnnotation/LINEWORK',(#972),$,$); +#972=IFCPROPERTYSET('2uTJ11lF98GeN8pPIf340N',$,'EPset_Annotation',$,(#973)); +#973=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('medium'),$); +#974=IFCTYPEPRODUCT('38zW9E1uH2ae$zat9KrieS',$,'THICK',$,'IfcAnnotation/LINEWORK',(#975),$,$); +#975=IFCPROPERTYSET('2XQxgO16v9vxjvuIJpaPpG',$,'EPset_Annotation',$,(#976)); +#976=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('thick'),$); +#977=IFCTYPEPRODUCT('3G2s7ZLzfDJh5J$2iIzHw9',$,'STRONG',$,'IfcAnnotation/LINEWORK',(#978),$,$); +#978=IFCPROPERTYSET('0TcB8Gal96vebTrLWa5CEw',$,'EPset_Annotation',$,(#979)); +#979=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('strong'),$); +#980=IFCTYPEPRODUCT('3pq2B$0k52ZOv2bFuRYkxO',$,'SETOUT-TAG',$,'IfcAnnotation/TEXT',(#981),(#1000),$); +#981=IFCPROPERTYSET('39$oNFI052cBhtpZCVVLfj',$,'EPset_Annotation',$,(#982)); +#982=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('setout-tag'),$); +#983=IFCCARTESIANPOINT((0.,0.,0.)); +#984=IFCDIRECTION((0.,0.,1.)); +#985=IFCDIRECTION((1.,0.,0.)); +#986=IFCAXIS2PLACEMENT3D(#983,#984,#985); +#987=IFCPLANAREXTENT(1000.,1000.); +#988=IFCTEXTLITERALWITHEXTENT('E ``round({{easting}}, 0.001)``',#986,.RIGHT.,#987,'center'); +#989=IFCCARTESIANPOINT((0.,0.,0.)); +#990=IFCDIRECTION((0.,0.,1.)); +#991=IFCDIRECTION((1.,0.,0.)); +#992=IFCAXIS2PLACEMENT3D(#989,#990,#991); +#993=IFCPLANAREXTENT(1000.,1000.); +#994=IFCTEXTLITERALWITHEXTENT('N ``round({{northing}}, 0.001)``',#992,.RIGHT.,#993,'center'); +#995=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#988,#994)); +#996=IFCCARTESIANPOINT((0.,0.,0.)); +#997=IFCDIRECTION((1.,0.,0.)); +#998=IFCDIRECTION((0.,0.,1.)); +#999=IFCAXIS2PLACEMENT3D(#996,#998,#997); +#1000=IFCREPRESENTATIONMAP(#999,#995); +#1001=IFCTYPEPRODUCT('11M3ahhrr9NBdB29YEazzw',$,'DOOR-TAG',$,'IfcAnnotation/TEXT',(#1002),(#1021),$); +#1002=IFCPROPERTYSET('3xUNoLKPT9kB4LMdoctm5k',$,'EPset_Annotation',$,(#1003)); +#1003=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('door-tag'),$); +#1004=IFCCARTESIANPOINT((0.,0.,0.)); +#1005=IFCDIRECTION((0.,0.,1.)); +#1006=IFCDIRECTION((1.,0.,0.)); +#1007=IFCAXIS2PLACEMENT3D(#1004,#1005,#1006); +#1008=IFCPLANAREXTENT(1000.,1000.); +#1009=IFCTEXTLITERALWITHEXTENT('{{type.Name}}',#1007,.RIGHT.,#1008,'center'); +#1010=IFCCARTESIANPOINT((0.,0.,0.)); +#1011=IFCDIRECTION((0.,0.,1.)); +#1012=IFCDIRECTION((1.,0.,0.)); +#1013=IFCAXIS2PLACEMENT3D(#1010,#1011,#1012); +#1014=IFCPLANAREXTENT(1000.,1000.); +#1015=IFCTEXTLITERALWITHEXTENT('{{Name}}',#1013,.RIGHT.,#1014,'center'); +#1016=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1009,#1015)); +#1017=IFCCARTESIANPOINT((0.,0.,0.)); +#1018=IFCDIRECTION((1.,0.,0.)); +#1019=IFCDIRECTION((0.,0.,1.)); +#1020=IFCAXIS2PLACEMENT3D(#1017,#1019,#1018); +#1021=IFCREPRESENTATIONMAP(#1020,#1016); +#1022=IFCTYPEPRODUCT('1eE8Y$BVDFDgG8Fj6d9wiV',$,'WINDOW-TAG',$,'IfcAnnotation/TEXT',(#1023),(#1036),$); +#1023=IFCPROPERTYSET('2MqzSGkXDBcPSolaAQvYO4',$,'EPset_Annotation',$,(#1024)); +#1024=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('window-tag'),$); +#1025=IFCCARTESIANPOINT((0.,0.,0.)); +#1026=IFCDIRECTION((0.,0.,1.)); +#1027=IFCDIRECTION((1.,0.,0.)); +#1028=IFCAXIS2PLACEMENT3D(#1025,#1026,#1027); +#1029=IFCPLANAREXTENT(1000.,1000.); +#1030=IFCTEXTLITERALWITHEXTENT('{{Name}}',#1028,.RIGHT.,#1029,'center'); +#1031=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1030)); +#1032=IFCCARTESIANPOINT((0.,0.,0.)); +#1033=IFCDIRECTION((1.,0.,0.)); +#1034=IFCDIRECTION((0.,0.,1.)); +#1035=IFCAXIS2PLACEMENT3D(#1032,#1034,#1033); +#1036=IFCREPRESENTATIONMAP(#1035,#1031); +#1037=IFCTYPEPRODUCT('0vvfHSiaPBxewA$32C4LdW',$,'SPACE-TAG',$,'IfcAnnotation/TEXT',(#1038),(#1063),$); +#1038=IFCPROPERTYSET('2zKuFdTPj3DhNdQ0U2kd5u',$,'EPset_Annotation',$,(#1039)); +#1039=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('space-tag'),$); +#1040=IFCCARTESIANPOINT((0.,0.,0.)); +#1041=IFCDIRECTION((0.,0.,1.)); +#1042=IFCDIRECTION((1.,0.,0.)); +#1043=IFCAXIS2PLACEMENT3D(#1040,#1041,#1042); +#1044=IFCPLANAREXTENT(1000.,1000.); +#1045=IFCTEXTLITERALWITHEXTENT('{{Name}}',#1043,.RIGHT.,#1044,'center'); +#1046=IFCCARTESIANPOINT((0.,0.,0.)); +#1047=IFCDIRECTION((0.,0.,1.)); +#1048=IFCDIRECTION((1.,0.,0.)); +#1049=IFCAXIS2PLACEMENT3D(#1046,#1047,#1048); +#1050=IFCPLANAREXTENT(1000.,1000.); +#1051=IFCTEXTLITERALWITHEXTENT('{{Description}}',#1049,.RIGHT.,#1050,'center'); +#1052=IFCCARTESIANPOINT((0.,0.,0.)); +#1053=IFCDIRECTION((0.,0.,1.)); +#1054=IFCDIRECTION((1.,0.,0.)); +#1055=IFCAXIS2PLACEMENT3D(#1052,#1053,#1054); +#1056=IFCPLANAREXTENT(1000.,1000.); +#1057=IFCTEXTLITERALWITHEXTENT('``round({{Qto_SpaceBaseQuantities.NetFloorArea}}, 0.01)``',#1055,.RIGHT.,#1056,'center'); +#1058=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1045,#1051,#1057)); +#1059=IFCCARTESIANPOINT((0.,0.,0.)); +#1060=IFCDIRECTION((1.,0.,0.)); +#1061=IFCDIRECTION((0.,0.,1.)); +#1062=IFCAXIS2PLACEMENT3D(#1059,#1061,#1060); +#1063=IFCREPRESENTATIONMAP(#1062,#1058); +#1064=IFCTYPEPRODUCT('36lTcd9yT8UBNDejQUNWrq',$,'MATERIAL-TAG',$,'IfcAnnotation/TEXT',(#1065),(#1078),$); +#1065=IFCPROPERTYSET('1x86VNVk1Drwe5XOj$GZX3',$,'EPset_Annotation',$,(#1066)); +#1066=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('rectangle-tag'),$); +#1067=IFCCARTESIANPOINT((0.,0.,0.)); +#1068=IFCDIRECTION((0.,0.,1.)); +#1069=IFCDIRECTION((1.,0.,0.)); +#1070=IFCAXIS2PLACEMENT3D(#1067,#1068,#1069); +#1071=IFCPLANAREXTENT(1000.,1000.); +#1072=IFCTEXTLITERALWITHEXTENT('{{material.Name}}',#1070,.RIGHT.,#1071,'center'); +#1073=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1072)); +#1074=IFCCARTESIANPOINT((0.,0.,0.)); +#1075=IFCDIRECTION((1.,0.,0.)); +#1076=IFCDIRECTION((0.,0.,1.)); +#1077=IFCAXIS2PLACEMENT3D(#1074,#1076,#1075); +#1078=IFCREPRESENTATIONMAP(#1077,#1073); +#1079=IFCTYPEPRODUCT('1rxhEX6I16oPqglXaGZ7Sw',$,'TYPE-TAG',$,'IfcAnnotation/TEXT',(#1080),(#1093),$); +#1080=IFCPROPERTYSET('3BeqEbDzX0xORamqqSx_kZ',$,'EPset_Annotation',$,(#1081)); +#1081=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('capsule-tag'),$); +#1082=IFCCARTESIANPOINT((0.,0.,0.)); +#1083=IFCDIRECTION((0.,0.,1.)); +#1084=IFCDIRECTION((1.,0.,0.)); +#1085=IFCAXIS2PLACEMENT3D(#1082,#1083,#1084); +#1086=IFCPLANAREXTENT(1000.,1000.); +#1087=IFCTEXTLITERALWITHEXTENT('{{type.Name}}',#1085,.RIGHT.,#1086,'center'); +#1088=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1087)); +#1089=IFCCARTESIANPOINT((0.,0.,0.)); +#1090=IFCDIRECTION((1.,0.,0.)); +#1091=IFCDIRECTION((0.,0.,1.)); +#1092=IFCAXIS2PLACEMENT3D(#1089,#1091,#1090); +#1093=IFCREPRESENTATIONMAP(#1092,#1088); +#1094=IFCTYPEPRODUCT('0sws1hxNb2Og1etXqyoEh1',$,'NAME-TAG',$,'IfcAnnotation/TEXT',(#1095),(#1108),$); +#1095=IFCPROPERTYSET('11L$PtdnX8LfYigzRZ$g0a',$,'EPset_Annotation',$,(#1096)); +#1096=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('capsule-tag'),$); +#1097=IFCCARTESIANPOINT((0.,0.,0.)); +#1098=IFCDIRECTION((0.,0.,1.)); +#1099=IFCDIRECTION((1.,0.,0.)); +#1100=IFCAXIS2PLACEMENT3D(#1097,#1098,#1099); +#1101=IFCPLANAREXTENT(1000.,1000.); +#1102=IFCTEXTLITERALWITHEXTENT('{{Name}}',#1100,.RIGHT.,#1101,'center'); +#1103=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1102)); +#1104=IFCCARTESIANPOINT((0.,0.,0.)); +#1105=IFCDIRECTION((1.,0.,0.)); +#1106=IFCDIRECTION((0.,0.,1.)); +#1107=IFCAXIS2PLACEMENT3D(#1104,#1106,#1105); +#1108=IFCREPRESENTATIONMAP(#1107,#1103); +ENDSEC; +END-ISO-10303-21; diff --git a/src/bonsai/bonsai/bim/data/pset/EPset_Drawing.ifc b/src/bonsai/bonsai/bim/data/pset/EPset_Drawing.ifc index f02d4ed5e8..a516b9765d 100644 --- a/src/bonsai/bonsai/bim/data/pset/EPset_Drawing.ifc +++ b/src/bonsai/bonsai/bim/data/pset/EPset_Drawing.ifc @@ -1,11 +1,11 @@ ISO-10303-21; HEADER; -FILE_DESCRIPTION((),'2;1'); -FILE_NAME('EPset_Drawing.ifc','2020-01-01T00:00:00',(),(),'EPset_Drawing','EPset_Drawing',$); +FILE_DESCRIPTION($,'2;1'); +FILE_NAME('EPset_Drawing.ifc','2020-01-01T00:00:00',$,$,'EPset_Drawing','EPset_Drawing',$); FILE_SCHEMA(('IFC4')); ENDSEC; DATA; -#1=IFCPROPERTYSETTEMPLATE('2JhNIvqZrFnAgxfhK0XVQX',$,'EPset_Drawing','',.PSET_OCCURRENCEDRIVEN.,'IfcAnnotation/DRAWING',(#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15,#16,#17,#18,#19,#20,#21,#22,#23,#24,#25,#26,#27)); +#1=IFCPROPERTYSETTEMPLATE('2JhNIvqZrFnAgxfhK0XVQX',$,'EPset_Drawing','',.PSET_OCCURRENCEDRIVEN.,'IfcAnnotation/DRAWING',(#23,#22,#27,#24,#19,#12,#26,#9,#8,#7,#6,#4,#18,#11,#5,#20,#25,#14,#10,#17,#28,#16,#3,#21,#13,#15,#2)); #2=IFCSIMPLEPROPERTYTEMPLATE('23JavTMk98ZxXhrUEnjAcf',$,'TargetView','',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.); #3=IFCSIMPLEPROPERTYTEMPLATE('1yVWUt5H9DAOuu0OaMMLpe',$,'Scale','The scale of this drawing represented as a numerator and denominator, such as 1/100',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.); #4=IFCSIMPLEPROPERTYTEMPLATE('3gsuPBtU93b8f0gg1pjkq6',$,'HumanScale','The scale of this drawing in human readable format, such as 1:100',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.); @@ -14,7 +14,7 @@ DATA; #7=IFCSIMPLEPROPERTYTEMPLATE('2j2ZEZR8X5tONm7kli5hM6',$,'HasLinework','',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.); #8=IFCSIMPLEPROPERTYTEMPLATE('1ttChRysH9UuEX2FeMj5Hu',$,'HasAnnotation','',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.); #9=IFCSIMPLEPROPERTYTEMPLATE('2NPPxuABv1huDTVh32TFgw',$,'GlobalReferencing','',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.); -#10=IFCSIMPLEPROPERTYTEMPLATE('10hT_1zrzEbRRKMXYAWvtD',$,'Metadata','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.); +#10=IFCSIMPLEPROPERTYTEMPLATE('10hT_1zrzEbRRKMXYAWvtD',$,'Metadata','Comma separated list of selector expressions to evaluate for each drawing elementand add results to their ''class'' attribute.\X2\000A\X0\E.g. ''Name, id'' would add to ''class'' value similar to ''Name-Wall id-1220''.\X2\000A\X0\Then it can be used to applied css styles based on the resulting class.\X2\000A\X0\If attribute is not present on the element, then it won''t be added to it''s ''class''.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.); #11=IFCSIMPLEPROPERTYTEMPLATE('3Z0BXPSG5CWgtI33ioV7aj',$,'Include','Selector expression to include ifc elements in the drawing',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.); #12=IFCSIMPLEPROPERTYTEMPLATE('1RVts_g3PAw98PJA2yL3bO',$,'Exclude','Selector expression to exclude ifc elements in the drawing',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.); #13=IFCSIMPLEPROPERTYTEMPLATE('0c1$8NpYDEaBiJrj16jHIo',$,'Stylesheet','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.); @@ -32,5 +32,6 @@ DATA; #25=IFCSIMPLEPROPERTYTEMPLATE('3LHwCrOcb6Y8ozfJZ7Ay$c',$,'LineworkMode','Method to use for line work',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.); #26=IFCSIMPLEPROPERTYTEMPLATE('2iwERDOW55Pf4hCbuFRe1Q',$,'FillMode','Method to fill areas seen in projection',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.); #27=IFCSIMPLEPROPERTYTEMPLATE('1YF$qLzBzF19Io8aB2N8cE',$,'CutMode','Method for cutting geometry',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.); +#28=IFCSIMPLEPROPERTYTEMPLATE('1YSnFzurrEyRNtoLdmmddP',$,'BringToFront','The objects with these SVG classes will render in front of all other objects.Ex: IfcBeam, IfcColumn',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.); ENDSEC; END-ISO-10303-21; diff --git a/src/bonsai/bonsai/bim/data/templates/projects/IFC2X3 Demo Template.ifc b/src/bonsai/bonsai/bim/data/templates/projects/IFC2X3 Demo Template.ifc new file mode 120000 index 0000000000..70ed920747 --- /dev/null +++ b/src/bonsai/bonsai/bim/data/templates/projects/IFC2X3 Demo Template.ifc @@ -0,0 +1 @@ +../../libraries/IFC2X3 Demo Library.ifc \ No newline at end of file diff --git a/src/bonsai/bonsai/bim/data/templates/projects/IFC4 Demo Template.ifc b/src/bonsai/bonsai/bim/data/templates/projects/IFC4 Demo Template.ifc deleted file mode 100644 index ad708cd2fe..0000000000 --- a/src/bonsai/bonsai/bim/data/templates/projects/IFC4 Demo Template.ifc +++ /dev/null @@ -1,1117 +0,0 @@ -ISO-10303-21; -HEADER; -FILE_DESCRIPTION(('ViewDefinition[DesignTransferView]'),'2;1'); -FILE_NAME('/dev/null','2024-03-03T16:03:58+11:00',(),(),'IfcOpenShell v0.7.0-eaa2aa05a','IfcOpenShell v0.7.0-eaa2aa05a','Nobody'); -FILE_SCHEMA(('IFC4')); -ENDSEC; -DATA; -#1=IFCPROJECT('3NJUxHyTzEv96oezyDYEqf',$,'Bonsai Demo',$,$,$,$,(#12,#16),#7); -#2=IFCPROJECTLIBRARY('0D39k7hbT5ce$jWaCd2niG',$,'Bonsai Demo Library',$,$,$,$,$,$); -#3=IFCRELDECLARES('2RWVohyP57PBHT9zCs4H2O',$,$,$,#1,(#2)); -#4=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); -#5=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); -#6=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); -#7=IFCUNITASSIGNMENT((#6,#4,#5)); -#8=IFCCARTESIANPOINT((0.,0.,0.)); -#9=IFCDIRECTION((0.,0.,1.)); -#10=IFCDIRECTION((1.,0.,0.)); -#11=IFCAXIS2PLACEMENT3D(#8,#9,#10); -#12=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#11,$); -#13=IFCCARTESIANPOINT((0.,0.)); -#14=IFCDIRECTION((1.,0.)); -#15=IFCAXIS2PLACEMENT2D(#13,#14); -#16=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Plan',2,1.E-05,#15,$); -#17=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#12,$,.MODEL_VIEW.,$); -#18=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Plan',*,*,*,*,#16,$,.PLAN_VIEW.,$); -#19=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#16,$,.MODEL_VIEW.,$); -#20=IFCMATERIAL('Unknown',$,$); -#21=IFCWALLTYPE('2F1k78lI53fwS0rg3rqrRb',$,'WAL50',$,$,$,$,$,$,.NOTDEFINED.); -#22=IFCMATERIALLAYERSET((#24),$,$); -#23=IFCRELASSOCIATESMATERIAL('0khP_Smdj12f2JrOTRbRKj',$,$,$,(#21),#22); -#24=IFCMATERIALLAYER(#20,0.05,$,$,$,$,$); -#25=IFCRELDECLARES('31JriXdev6BP2sC9lcxdC1',$,$,$,#2,(#26,#48,#72,#59,#92,#30,#96,#63,#21,#54,#87,#210,#153,#34,#67,#38,#82,#77,#42)); -#26=IFCWALLTYPE('3R5onkTtX1IxdCMPoThRaw',$,'WAL100',$,$,$,$,$,$,.NOTDEFINED.); -#27=IFCMATERIALLAYERSET((#29),$,$); -#28=IFCRELASSOCIATESMATERIAL('0$mXRPCT16nP6Q70XFNvZv',$,$,$,(#26),#27); -#29=IFCMATERIALLAYER(#20,0.1,$,$,$,$,$); -#30=IFCWALLTYPE('1juanculbDJPqvqT2FCm8m',$,'WAL200',$,$,$,$,$,$,.NOTDEFINED.); -#31=IFCMATERIALLAYERSET((#33),$,$); -#32=IFCRELASSOCIATESMATERIAL('0FsB2A$frFn9AZW2IG38ny',$,$,$,(#30),#31); -#33=IFCMATERIALLAYER(#20,0.2,$,$,$,$,$); -#34=IFCWALLTYPE('05UYduR9r1vRxZZgP64Rdw',$,'WAL300',$,$,$,$,$,$,.NOTDEFINED.); -#35=IFCMATERIALLAYERSET((#37),$,$); -#36=IFCRELASSOCIATESMATERIAL('2FYhYrvmv4SBoZHVWDTTte',$,$,$,(#34),#35); -#37=IFCMATERIALLAYER(#20,0.3,$,$,$,$,$); -#38=IFCCOVERINGTYPE('0iLxgfHB9F2hRH2vMcw7Yv',$,'COV10',$,$,$,$,$,$,.NOTDEFINED.); -#39=IFCMATERIALLAYERSET((#41),$,$); -#40=IFCRELASSOCIATESMATERIAL('0yvFX0zgb9uvJ3ARnf4mfe',$,$,$,(#38),#39); -#41=IFCMATERIALLAYER(#20,0.01,$,$,$,$,$); -#42=IFCCOVERINGTYPE('15Riw2WTrAUPwvfLyKXJ2g',$,'COV20',$,$,(#46),$,$,$,.NOTDEFINED.); -#43=IFCMATERIALLAYERSET((#45),$,$); -#44=IFCRELASSOCIATESMATERIAL('1iAOG6NK9FBxitFtzN9qP5',$,$,$,(#42),#43); -#45=IFCMATERIALLAYER(#20,0.02,$,$,$,$,$); -#46=IFCPROPERTYSET('18ICCZ0fjDG9UXMyzrsFBA',$,'EPset_Parametric',$,(#47)); -#47=IFCPROPERTYSINGLEVALUE('LayerSetDirection',$,IFCLABEL('AXIS2'),$); -#48=IFCCOVERINGTYPE('0gEOtYULD0F9KD9zPoA6cJ',$,'COV30',$,$,(#52),$,$,$,.NOTDEFINED.); -#49=IFCMATERIALLAYERSET((#51),$,$); -#50=IFCRELASSOCIATESMATERIAL('0xd6dsjf13JA98q9fnAMpQ',$,$,$,(#48),#49); -#51=IFCMATERIALLAYER(#20,0.03,$,$,$,$,$); -#52=IFCPROPERTYSET('3qCbs1tuDCvuOXam5RrA$a',$,'EPset_Parametric',$,(#53)); -#53=IFCPROPERTYSINGLEVALUE('LayerSetDirection',$,IFCLABEL('AXIS3'),$); -#54=IFCRAMPTYPE('2yW1ePlyb8cOR6HdEntpRh',$,'RAM200',$,$,$,$,$,$,.NOTDEFINED.); -#55=IFCMATERIALLAYERSET((#57),$,$); -#56=IFCRELASSOCIATESMATERIAL('1x9ZyVim19AQtJhfEE06XR',$,$,$,(#54),#55); -#57=IFCMATERIALLAYER(#20,0.2,$,$,$,$,$); -#58=IFCCIRCLEPROFILEDEF(.AREA.,$,$,0.3); -#59=IFCPILETYPE('25MTkMtaH5QeCf$gFbvSSw',$,'P1',$,$,$,$,$,$,.NOTDEFINED.); -#60=IFCMATERIALPROFILESET($,$,(#62),$); -#61=IFCRELASSOCIATESMATERIAL('09FXUZCnrFEffxBrtg16gx',$,$,$,(#59),#60); -#62=IFCMATERIALPROFILE($,$,#20,#58,$,$); -#63=IFCSLABTYPE('1Akbal7tP5DAPW0ti$Qp30',$,'FLR200',$,$,$,$,$,$,.NOTDEFINED.); -#64=IFCMATERIALLAYERSET((#66),$,$); -#65=IFCRELASSOCIATESMATERIAL('0jzkXlkBL4HhmQ_FTWW6Cj',$,$,$,(#63),#64); -#66=IFCMATERIALLAYER(#20,0.2,$,$,$,$,$); -#67=IFCSLABTYPE('0$gpYNi3T08BrxaR67CxgI',$,'FLR300',$,$,$,$,$,$,.NOTDEFINED.); -#68=IFCMATERIALLAYERSET((#70),$,$); -#69=IFCRELASSOCIATESMATERIAL('3a6kjEM29DleYTlSkA8_DK',$,$,$,(#67),#68); -#70=IFCMATERIALLAYER(#20,0.3,$,$,$,$,$); -#71=IFCRECTANGLEPROFILEDEF(.AREA.,'500x600',$,0.5,0.6); -#72=IFCCOLUMNTYPE('278sjptdDDzgOZseERj390',$,'C1',$,$,$,$,$,$,.NOTDEFINED.); -#73=IFCMATERIALPROFILESET($,$,(#75),$); -#74=IFCRELASSOCIATESMATERIAL('1ppYXw39v6kBwi3rrIm4ZE',$,$,$,(#72),#73); -#75=IFCMATERIALPROFILE($,$,#20,#71,$,$); -#76=IFCCIRCLEHOLLOWPROFILEDEF(.AREA.,'500.0x5.0 CHS',$,0.25,0.005); -#77=IFCCOLUMNTYPE('3aSZOvGmr7jggSNwsq5PJE',$,'C2',$,$,$,$,$,$,.NOTDEFINED.); -#78=IFCMATERIALPROFILESET($,$,(#80),$); -#79=IFCRELASSOCIATESMATERIAL('1AtNJPaD14DgINbAjXvbU4',$,$,$,(#77),#78); -#80=IFCMATERIALPROFILE($,$,#20,#76,$,$); -#81=IFCRECTANGLEHOLLOWPROFILEDEF(.AREA.,'150x75x2.0 RHS',$,0.075,0.15,0.002,0.005,0.005); -#82=IFCCOLUMNTYPE('28iv3Kru12yQ7R7RRwNjvD',$,'C3',$,$,$,$,$,$,.NOTDEFINED.); -#83=IFCMATERIALPROFILESET($,$,(#85),$); -#84=IFCRELASSOCIATESMATERIAL('2M_oL$n3j6rBRnOW5RSk87',$,$,$,(#82),#83); -#85=IFCMATERIALPROFILE($,$,#20,#81,$,$); -#86=IFCISHAPEPROFILEDEF(.AREA.,'DEMO-I',$,0.1,0.2,0.005,0.01,0.005,$,$); -#87=IFCBEAMTYPE('2E$V5l4b54dxuToJ1A6IHp',$,'B1',$,$,$,$,$,$,.NOTDEFINED.); -#88=IFCMATERIALPROFILESET($,$,(#90),$); -#89=IFCRELASSOCIATESMATERIAL('3PUNnY7cj8LhyXbHKVqZnf',$,$,$,(#87),#88); -#90=IFCMATERIALPROFILE($,$,#20,#86,$,$); -#91=IFCCSHAPEPROFILEDEF(.AREA.,'DEMO-C',$,0.2,0.1,0.0015,0.03,0.005); -#92=IFCBEAMTYPE('3qutoZTvP0lvLWNXyjPhPm',$,'B2',$,$,$,$,$,$,.NOTDEFINED.); -#93=IFCMATERIALPROFILESET($,$,(#95),$); -#94=IFCRELASSOCIATESMATERIAL('3dGyQf42H2ahch2bSYPPHP',$,$,$,(#92),#93); -#95=IFCMATERIALPROFILE($,$,#20,#91,$,$); -#96=IFCWINDOWTYPE('0bK3c4PWL3eOMNwkPN$rlg',$,'WT01',$,$,$,(#135,#152),$,$,.NOTDEFINED.,.NOTDEFINED.,$,$); -#97=IFCINDEXEDPOLYGONALFACE((13,17,18,14)); -#98=IFCINDEXEDPOLYGONALFACE((5,6,3,4)); -#99=IFCINDEXEDPOLYGONALFACE((7,8,2,1)); -#100=IFCINDEXEDPOLYGONALFACE((6,7,1,3)); -#101=IFCINDEXEDPOLYGONALFACE((8,5,4,2)); -#102=IFCINDEXEDPOLYGONALFACE((12,11,10,9)); -#103=IFCINDEXEDPOLYGONALFACE((15,19,20,16)); -#104=IFCINDEXEDPOLYGONALFACE((14,18,19,15)); -#105=IFCINDEXEDPOLYGONALFACE((16,20,17,13)); -#106=IFCINDEXEDPOLYGONALFACE((4,17,20,2)); -#107=IFCINDEXEDPOLYGONALFACE((2,20,19,1)); -#108=IFCINDEXEDPOLYGONALFACE((8,16,13,5)); -#109=IFCINDEXEDPOLYGONALFACE((7,15,16,8)); -#110=IFCINDEXEDPOLYGONALFACE((1,19,18,3)); -#111=IFCINDEXEDPOLYGONALFACE((3,18,17,4)); -#112=IFCINDEXEDPOLYGONALFACE((6,14,15,7)); -#113=IFCINDEXEDPOLYGONALFACE((5,13,14,6)); -#114=IFCINDEXEDPOLYGONALFACE((24,21,22,23)); -#115=IFCINDEXEDPOLYGONALFACE((11,23,22,10)); -#116=IFCINDEXEDPOLYGONALFACE((10,22,21,9)); -#117=IFCINDEXEDPOLYGONALFACE((9,21,24,12)); -#118=IFCINDEXEDPOLYGONALFACE((12,24,23,11)); -#119=IFCCARTESIANPOINTLIST3D(((0.899999976158142,0.,1.20000004768372),(0.899999976158142,0.,0.),(0.,0.,1.20000004768372),(0.,0.,0.),(0.0999999940395355,0.,0.0999999940395355),(0.0999999940395355,0.,1.10000002384186),(0.800000011920929,0.,1.10000002384186),(0.800000011920929,0.,0.0999999940395355),(0.0999999940395355,0.0199999995529652,0.0999999940395355),(0.0999999940395355,0.0199999995529652,1.10000002384186),(0.800000011920929,0.0199999995529652,1.10000002384186),(0.800000011920929,0.0199999995529652,0.0999999940395355),(0.0999999940395355,0.0500000007450581,0.0999999940395355),(0.0999999940395355,0.0500000007450581,1.10000002384186),(0.800000011920929,0.0500000007450581,1.10000002384186),(0.800000011920929,0.0500000007450581,0.0999999940395355),(0.,0.0500000007450581,0.),(0.,0.0500000007450581,1.20000004768372),(0.899999976158142,0.0500000007450581,1.20000004768372),(0.899999976158142,0.0500000007450581,0.),(0.0999999940395355,0.0299999993294477,0.0999999940395355),(0.0999999940395355,0.0299999993294477,1.10000002384186),(0.800000011920929,0.0299999993294477,1.10000002384186),(0.800000011920929,0.0299999993294477,0.0999999940395355))); -#120=IFCPOLYGONALFACESET(#119,.T.,(#97,#98,#99,#100,#101,#103,#104,#105,#106,#107,#108,#109,#110,#111,#112,#113),$); -#121=IFCPOLYGONALFACESET(#119,.T.,(#102,#114,#115,#116,#117,#118),$); -#122=IFCSHAPEREPRESENTATION(#17,'Body','Tessellation',(#120,#121)); -#123=IFCSURFACESTYLE('Frame',.BOTH.,(#124)); -#124=IFCSURFACESTYLESHADING(#125,0.); -#125=IFCCOLOURRGB($,0.0429765619337559,0.0429765619337559,0.0429765619337559); -#126=IFCSURFACESTYLE('Glass',.BOTH.,(#127)); -#127=IFCSURFACESTYLESHADING(#128,0.799999997019768); -#128=IFCCOLOURRGB($,0.800000011920929,1.,1.); -#129=IFCSTYLEDITEM(#120,(#123),'Frame'); -#130=IFCSTYLEDITEM(#121,(#126),'Glass'); -#131=IFCCARTESIANPOINT((0.,0.,0.)); -#132=IFCDIRECTION((1.,0.,0.)); -#133=IFCDIRECTION((0.,0.,1.)); -#134=IFCAXIS2PLACEMENT3D(#131,#133,#132); -#135=IFCREPRESENTATIONMAP(#134,#122); -#136=IFCCARTESIANPOINTLIST2D(((0.100000023841858,0.0200000032782555),(0.800000011920929,0.0200000032782555),(0.800000011920929,0.0300000011920929),(0.100000023841858,0.0300000011920929))); -#137=IFCINDEXEDPOLYCURVE(#136,(IFCLINEINDEX((1,2,3,4,1))),$); -#138=IFCCARTESIANPOINTLIST2D(((0.899999976158142,0.0500000007450581),(0.800000011920929,0.0500000007450581),(0.800000011920929,0.),(0.899999976158142,0.))); -#139=IFCINDEXEDPOLYCURVE(#138,(IFCLINEINDEX((1,2,3,4,1))),$); -#140=IFCCARTESIANPOINTLIST2D(((0.,0.),(0.100000023841858,0.),(0.100000023841858,0.0500000007450581),(0.,0.0500000007450581))); -#141=IFCINDEXEDPOLYCURVE(#140,(IFCLINEINDEX((1,2,3,4,1))),$); -#142=IFCCARTESIANPOINTLIST2D(((0.100000023841858,0.0500000007450581),(0.800000011920929,0.0500000007450581))); -#143=IFCINDEXEDPOLYCURVE(#142,$,$); -#144=IFCCARTESIANPOINTLIST2D(((0.100000023841858,0.),(0.800000011920929,0.))); -#145=IFCINDEXEDPOLYCURVE(#144,$,$); -#146=IFCGEOMETRICCURVESET((#137,#139,#141,#143,#145)); -#147=IFCSHAPEREPRESENTATION(#18,'Body','Annotation2D',(#146)); -#148=IFCCARTESIANPOINT((0.,0.,0.)); -#149=IFCDIRECTION((1.,0.,0.)); -#150=IFCDIRECTION((0.,0.,1.)); -#151=IFCAXIS2PLACEMENT3D(#148,#150,#149); -#152=IFCREPRESENTATIONMAP(#151,#147); -#153=IFCDOORTYPE('2j0vIBgkH0ERnBCP0cpcCz',$,'DT01',$,$,$,(#196,#209),$,$,.NOTDEFINED.,.NOTDEFINED.,$,$); -#154=IFCINDEXEDPOLYGONALFACE((17,16,15,14)); -#155=IFCINDEXEDPOLYGONALFACE((2,3,29,28)); -#156=IFCINDEXEDPOLYGONALFACE((27,28,29,30,32,31)); -#157=IFCINDEXEDPOLYGONALFACE((7,6,5,3)); -#158=IFCINDEXEDPOLYGONALFACE((8,7,3,2)); -#159=IFCINDEXEDPOLYGONALFACE((23,24,6,7)); -#160=IFCINDEXEDPOLYGONALFACE((21,20,4,24,23,22)); -#161=IFCINDEXEDPOLYGONALFACE((12,13,14,15)); -#162=IFCINDEXEDPOLYGONALFACE((16,19,12,15)); -#163=IFCINDEXEDPOLYGONALFACE((11,10,25,26)); -#164=IFCINDEXEDPOLYGONALFACE((25,1,27,31)); -#165=IFCINDEXEDPOLYGONALFACE((24,4,11,6)); -#166=IFCINDEXEDPOLYGONALFACE((20,21,9,10)); -#167=IFCINDEXEDPOLYGONALFACE((9,8,2,1)); -#168=IFCINDEXEDPOLYGONALFACE((10,9,1,25)); -#169=IFCINDEXEDPOLYGONALFACE((22,23,7,8)); -#170=IFCINDEXEDPOLYGONALFACE((4,20,10,11)); -#171=IFCINDEXEDPOLYGONALFACE((19,16,17,18)); -#172=IFCINDEXEDPOLYGONALFACE((19,18,13,12)); -#173=IFCINDEXEDPOLYGONALFACE((21,22,8,9)); -#174=IFCINDEXEDPOLYGONALFACE((6,11,26,5)); -#175=IFCINDEXEDPOLYGONALFACE((18,17,14,13)); -#176=IFCINDEXEDPOLYGONALFACE((5,26,32,30)); -#177=IFCINDEXEDPOLYGONALFACE((1,2,28,27)); -#178=IFCINDEXEDPOLYGONALFACE((26,25,31,32)); -#179=IFCINDEXEDPOLYGONALFACE((3,5,30,29)); -#180=IFCCARTESIANPOINTLIST3D(((0.955000162124634,0.,2.09000015258789),(0.955000162124634,0.0549999885261059,2.09000015258789),(0.970000028610229,0.0549999922513962,2.10500001907349),(0.,0.0999999940395355,0.),(0.970000028610229,0.0999999940395355,2.10500001907349),(0.0399999916553497,0.0999999940395355,2.10500001907349),(0.0399999916553497,0.0549999922513962,2.10500001907349),(0.0550000071525574,0.0549999885261059,2.09000015258789),(0.0550000071525574,0.,2.09000015258789),(0.,0.,2.14500021934509),(0.,0.100000001490116,2.14500021934509),(0.0449999868869781,0.0999999940395355,2.09999990463257),(0.0449999868869781,0.0599999949336052,2.09999990463257),(0.965000033378601,0.0599999949336052,2.09999990463257),(0.965000033378601,0.0999999940395355,2.09999990463257),(0.965000033378601,0.0999999940395355,0.),(0.965000033378601,0.0599999949336052,0.),(0.0449999868869781,0.0599999949336052,0.),(0.0449999868869781,0.0999999940395355,0.),(0.,0.,0.),(0.0550000071525574,0.,0.),(0.0550000071525574,0.0549999922513962,0.),(0.0399999916553497,0.0549999922513962,0.),(0.0399999916553497,0.0999999940395355,0.),(1.01000034809113,0.,2.14500021934509),(1.01000034809113,0.100000001490116,2.14500021934509),(0.955000162124634,0.,0.),(0.955000162124634,0.0549999885261059,0.),(0.970000028610229,0.0549999922513962,0.),(0.970000028610229,0.0999999940395355,0.),(1.01000034809113,0.,0.),(1.01000034809113,0.100000001490116,0.))); -#181=IFCPOLYGONALFACESET(#180,.T.,(#155,#156,#157,#158,#159,#160,#163,#164,#165,#166,#167,#168,#169,#170,#173,#174,#176,#177,#178,#179),$); -#182=IFCPOLYGONALFACESET(#180,.T.,(#154,#161,#162,#171,#172,#175),$); -#183=IFCSHAPEREPRESENTATION(#17,'Body','Tessellation',(#181,#182)); -#184=IFCSURFACESTYLE('Frame',.BOTH.,(#185)); -#185=IFCSURFACESTYLESHADING(#186,0.); -#186=IFCCOLOURRGB($,0.0429765619337559,0.0429765619337559,0.0429765619337559); -#187=IFCSURFACESTYLE('Panel',.BOTH.,(#188)); -#188=IFCSURFACESTYLESHADING(#189,0.); -#189=IFCCOLOURRGB($,0.184475064277649,0.184475019574165,0.184475019574165); -#190=IFCSTYLEDITEM(#181,(#184),'Frame'); -#191=IFCSTYLEDITEM(#182,(#187),'Panel'); -#192=IFCCARTESIANPOINT((0.,0.,0.)); -#193=IFCDIRECTION((1.,0.,0.)); -#194=IFCDIRECTION((0.,0.,1.)); -#195=IFCAXIS2PLACEMENT3D(#192,#194,#193); -#196=IFCREPRESENTATIONMAP(#195,#183); -#197=IFCCARTESIANPOINTLIST2D(((0.964999914169312,1.0200001001358),(0.965000033378601,0.0999999940395355),(0.925000011920929,0.0999999940395355),(0.924999952316284,1.0200001001358),(0.964999914169312,1.0200001001358),(0.844915807247162,1.01212930679321),(0.726886332035065,0.988651752471924),(0.612931072711945,0.949969172477722),(0.504999756813049,0.896743297576904),(0.404939234256744,0.829885005950928),(0.314461469650269,0.750538170337677),(0.235114604234695,0.660060405731201),(0.168256282806396,0.559999823570251),(0.115030474960804,0.452068567276001),(0.0763478726148605,0.338113307952881),(0.0528703518211842,0.220083817839622),(0.0449996180832386,0.099999688565731))); -#198=IFCINDEXEDPOLYCURVE(#197,$,$); -#199=IFCCARTESIANPOINTLIST2D(((0.970000028610229,0.0549999922513962),(0.955000162124634,0.0549999922513962),(0.955000162124634,0.),(1.01000034809113,0.),(1.01000034809113,0.0999999940395355),(0.970000028610229,0.0999999940395355))); -#200=IFCINDEXEDPOLYCURVE(#199,(IFCLINEINDEX((1,2,3,4,5,6,1))),$); -#201=IFCCARTESIANPOINTLIST2D(((0.,0.),(0.,0.0999999940395355),(0.0399999916553497,0.0999999940395355),(0.0399999916553497,0.0549999922513962),(0.0550000071525574,0.0549999922513962),(0.0550000071525574,0.))); -#202=IFCINDEXEDPOLYCURVE(#201,(IFCLINEINDEX((1,2,3,4,5,6,1))),$); -#203=IFCGEOMETRICCURVESET((#198,#200,#202)); -#204=IFCSHAPEREPRESENTATION(#18,'Body','Annotation2D',(#203)); -#205=IFCCARTESIANPOINT((0.,0.,0.)); -#206=IFCDIRECTION((1.,0.,0.)); -#207=IFCDIRECTION((0.,0.,1.)); -#208=IFCAXIS2PLACEMENT3D(#205,#207,#206); -#209=IFCREPRESENTATIONMAP(#208,#204); -#210=IFCFURNITURETYPE('02XxQ_3oT0SPrmFPATrt7o',$,'BUN01',$,$,$,(#931,#952),$,$,.NOTDEFINED.,.NOTDEFINED.); -#211=IFCINDEXEDPOLYGONALFACE((187,278,44)); -#212=IFCINDEXEDPOLYGONALFACE((21,52,60)); -#213=IFCINDEXEDPOLYGONALFACE((91,100,31)); -#214=IFCINDEXEDPOLYGONALFACE((162,19,191)); -#215=IFCINDEXEDPOLYGONALFACE((288,180,159)); -#216=IFCINDEXEDPOLYGONALFACE((241,219,307)); -#217=IFCINDEXEDPOLYGONALFACE((54,93,173)); -#218=IFCINDEXEDPOLYGONALFACE((60,45,21)); -#219=IFCINDEXEDPOLYGONALFACE((58,110,55)); -#220=IFCINDEXEDPOLYGONALFACE((64,18,70)); -#221=IFCINDEXEDPOLYGONALFACE((2,207,162)); -#222=IFCINDEXEDPOLYGONALFACE((10,176,188)); -#223=IFCINDEXEDPOLYGONALFACE((105,114,113)); -#224=IFCINDEXEDPOLYGONALFACE((220,106,249)); -#225=IFCINDEXEDPOLYGONALFACE((252,321,244)); -#226=IFCINDEXEDPOLYGONALFACE((162,57,19)); -#227=IFCINDEXEDPOLYGONALFACE((224,147,220)); -#228=IFCINDEXEDPOLYGONALFACE((90,373,124)); -#229=IFCINDEXEDPOLYGONALFACE((70,199,64)); -#230=IFCINDEXEDPOLYGONALFACE((256,248,258)); -#231=IFCINDEXEDPOLYGONALFACE((115,212,207)); -#232=IFCINDEXEDPOLYGONALFACE((103,36,7)); -#233=IFCINDEXEDPOLYGONALFACE((71,306,320)); -#234=IFCINDEXEDPOLYGONALFACE((297,267,294)); -#235=IFCINDEXEDPOLYGONALFACE((57,50,19)); -#236=IFCINDEXEDPOLYGONALFACE((117,44,188)); -#237=IFCINDEXEDPOLYGONALFACE((62,56,153)); -#238=IFCINDEXEDPOLYGONALFACE((106,147,120)); -#239=IFCINDEXEDPOLYGONALFACE((254,244,245)); -#240=IFCINDEXEDPOLYGONALFACE((208,207,2)); -#241=IFCINDEXEDPOLYGONALFACE((256,257,250)); -#242=IFCINDEXEDPOLYGONALFACE((203,205,211)); -#243=IFCINDEXEDPOLYGONALFACE((56,278,157)); -#244=IFCINDEXEDPOLYGONALFACE((103,7,9)); -#245=IFCINDEXEDPOLYGONALFACE((63,140,176)); -#246=IFCINDEXEDPOLYGONALFACE((15,109,118)); -#247=IFCINDEXEDPOLYGONALFACE((59,159,180)); -#248=IFCINDEXEDPOLYGONALFACE((158,154,208)); -#249=IFCINDEXEDPOLYGONALFACE((300,241,308)); -#250=IFCINDEXEDPOLYGONALFACE((23,32,42)); -#251=IFCINDEXEDPOLYGONALFACE((44,278,56)); -#252=IFCINDEXEDPOLYGONALFACE((189,259,67)); -#253=IFCINDEXEDPOLYGONALFACE((309,304,333)); -#254=IFCINDEXEDPOLYGONALFACE((136,89,259)); -#255=IFCINDEXEDPOLYGONALFACE((31,191,19)); -#256=IFCINDEXEDPOLYGONALFACE((295,304,294)); -#257=IFCINDEXEDPOLYGONALFACE((50,38,19)); -#258=IFCINDEXEDPOLYGONALFACE((44,62,10)); -#259=IFCINDEXEDPOLYGONALFACE((369,25,227)); -#260=IFCINDEXEDPOLYGONALFACE((136,47,233)); -#261=IFCINDEXEDPOLYGONALFACE((33,54,201)); -#262=IFCINDEXEDPOLYGONALFACE((333,304,329)); -#263=IFCINDEXEDPOLYGONALFACE((281,110,285)); -#264=IFCINDEXEDPOLYGONALFACE((275,80,276)); -#265=IFCINDEXEDPOLYGONALFACE((119,106,120)); -#266=IFCINDEXEDPOLYGONALFACE((276,80,233)); -#267=IFCINDEXEDPOLYGONALFACE((232,318,312)); -#268=IFCINDEXEDPOLYGONALFACE((208,63,115)); -#269=IFCINDEXEDPOLYGONALFACE((150,288,159)); -#270=IFCINDEXEDPOLYGONALFACE((286,287,284)); -#271=IFCINDEXEDPOLYGONALFACE((286,285,287)); -#272=IFCINDEXEDPOLYGONALFACE((285,286,279)); -#273=IFCINDEXEDPOLYGONALFACE((239,171,240)); -#274=IFCINDEXEDPOLYGONALFACE((233,47,276)); -#275=IFCINDEXEDPOLYGONALFACE((124,213,90)); -#276=IFCINDEXEDPOLYGONALFACE((157,278,47)); -#277=IFCINDEXEDPOLYGONALFACE((187,47,157)); -#278=IFCINDEXEDPOLYGONALFACE((268,75,222)); -#279=IFCINDEXEDPOLYGONALFACE((101,269,232)); -#280=IFCINDEXEDPOLYGONALFACE((277,7,13)); -#281=IFCINDEXEDPOLYGONALFACE((140,63,74)); -#282=IFCINDEXEDPOLYGONALFACE((140,74,56)); -#283=IFCINDEXEDPOLYGONALFACE((74,153,56)); -#284=IFCINDEXEDPOLYGONALFACE((57,201,50)); -#285=IFCINDEXEDPOLYGONALFACE((320,236,193)); -#286=IFCINDEXEDPOLYGONALFACE((222,236,268)); -#287=IFCINDEXEDPOLYGONALFACE((173,50,201)); -#288=IFCINDEXEDPOLYGONALFACE((299,267,297)); -#289=IFCINDEXEDPOLYGONALFACE((162,212,57)); -#290=IFCINDEXEDPOLYGONALFACE((208,115,207)); -#291=IFCINDEXEDPOLYGONALFACE((267,292,274)); -#292=IFCINDEXEDPOLYGONALFACE((98,197,277)); -#293=IFCINDEXEDPOLYGONALFACE((295,328,329)); -#294=IFCINDEXEDPOLYGONALFACE((158,208,2)); -#295=IFCINDEXEDPOLYGONALFACE((201,57,33)); -#296=IFCINDEXEDPOLYGONALFACE((187,47,278)); -#297=IFCINDEXEDPOLYGONALFACE((241,307,308)); -#298=IFCINDEXEDPOLYGONALFACE((335,317,245)); -#299=IFCINDEXEDPOLYGONALFACE((328,330,329)); -#300=IFCINDEXEDPOLYGONALFACE((84,128,121)); -#301=IFCINDEXEDPOLYGONALFACE((331,330,328)); -#302=IFCINDEXEDPOLYGONALFACE((300,331,328)); -#303=IFCINDEXEDPOLYGONALFACE((129,19,38)); -#304=IFCINDEXEDPOLYGONALFACE((154,298,66)); -#305=IFCINDEXEDPOLYGONALFACE((317,322,323)); -#306=IFCINDEXEDPOLYGONALFACE((302,297,303)); -#307=IFCINDEXEDPOLYGONALFACE((212,93,167)); -#308=IFCINDEXEDPOLYGONALFACE((94,185,184)); -#309=IFCINDEXEDPOLYGONALFACE((211,121,100)); -#310=IFCINDEXEDPOLYGONALFACE((212,173,93)); -#311=IFCINDEXEDPOLYGONALFACE((317,254,245)); -#312=IFCINDEXEDPOLYGONALFACE((51,15,41)); -#313=IFCINDEXEDPOLYGONALFACE((321,339,244)); -#314=IFCINDEXEDPOLYGONALFACE((244,335,245)); -#315=IFCINDEXEDPOLYGONALFACE((211,204,121)); -#316=IFCINDEXEDPOLYGONALFACE((246,72,358)); -#317=IFCINDEXEDPOLYGONALFACE((300,360,301)); -#318=IFCINDEXEDPOLYGONALFACE((234,177,39)); -#319=IFCINDEXEDPOLYGONALFACE((125,152,177)); -#320=IFCINDEXEDPOLYGONALFACE((338,314,311)); -#321=IFCINDEXEDPOLYGONALFACE((149,94,152)); -#322=IFCINDEXEDPOLYGONALFACE((39,175,137)); -#323=IFCINDEXEDPOLYGONALFACE((334,292,267)); -#324=IFCINDEXEDPOLYGONALFACE((343,338,340,346)); -#325=IFCINDEXEDPOLYGONALFACE((283,286,284)); -#326=IFCINDEXEDPOLYGONALFACE((129,16,53)); -#327=IFCINDEXEDPOLYGONALFACE((102,249,106)); -#328=IFCINDEXEDPOLYGONALFACE((197,12,23)); -#329=IFCINDEXEDPOLYGONALFACE((330,310,178)); -#330=IFCINDEXEDPOLYGONALFACE((307,61,22,308)); -#331=IFCINDEXEDPOLYGONALFACE((300,310,331)); -#332=IFCINDEXEDPOLYGONALFACE((205,190,194)); -#333=IFCINDEXEDPOLYGONALFACE((133,2,31)); -#334=IFCINDEXEDPOLYGONALFACE((85,92,20)); -#335=IFCINDEXEDPOLYGONALFACE((360,39,301)); -#336=IFCINDEXEDPOLYGONALFACE((122,47,136)); -#337=IFCINDEXEDPOLYGONALFACE((281,282,186)); -#338=IFCINDEXEDPOLYGONALFACE((2,191,31)); -#339=IFCINDEXEDPOLYGONALFACE((250,249,247)); -#340=IFCINDEXEDPOLYGONALFACE((58,214,216)); -#341=IFCINDEXEDPOLYGONALFACE((234,138,143)); -#342=IFCINDEXEDPOLYGONALFACE((141,298,154)); -#343=IFCINDEXEDPOLYGONALFACE((27,45,76)); -#344=IFCINDEXEDPOLYGONALFACE((146,181,145)); -#345=IFCINDEXEDPOLYGONALFACE((144,181,180)); -#346=IFCINDEXEDPOLYGONALFACE((195,185,179)); -#347=IFCINDEXEDPOLYGONALFACE((228,223,229)); -#348=IFCINDEXEDPOLYGONALFACE((49,358,72)); -#349=IFCINDEXEDPOLYGONALFACE((74,34,183)); -#350=IFCINDEXEDPOLYGONALFACE((221,218,223)); -#351=IFCINDEXEDPOLYGONALFACE((146,107,108)); -#352=IFCINDEXEDPOLYGONALFACE((194,204,205)); -#353=IFCINDEXEDPOLYGONALFACE((352,359,280,279)); -#354=IFCINDEXEDPOLYGONALFACE((46,64,199)); -#355=IFCINDEXEDPOLYGONALFACE((366,86,251)); -#356=IFCINDEXEDPOLYGONALFACE((48,114,105)); -#357=IFCINDEXEDPOLYGONALFACE((198,95,164)); -#358=IFCINDEXEDPOLYGONALFACE((372,65,167)); -#359=IFCINDEXEDPOLYGONALFACE((74,132,153)); -#360=IFCINDEXEDPOLYGONALFACE((21,12,4)); -#361=IFCINDEXEDPOLYGONALFACE((288,111,113)); -#362=IFCINDEXEDPOLYGONALFACE((75,225,174)); -#363=IFCINDEXEDPOLYGONALFACE((166,262,200)); -#364=IFCINDEXEDPOLYGONALFACE((223,230,229)); -#365=IFCINDEXEDPOLYGONALFACE((26,92,3)); -#366=IFCINDEXEDPOLYGONALFACE((219,88,82)); -#367=IFCINDEXEDPOLYGONALFACE((355,357,365,364)); -#368=IFCINDEXEDPOLYGONALFACE((322,325,324)); -#369=IFCINDEXEDPOLYGONALFACE((257,220,250)); -#370=IFCINDEXEDPOLYGONALFACE((289,104,253)); -#371=IFCINDEXEDPOLYGONALFACE((228,108,221)); -#372=IFCINDEXEDPOLYGONALFACE((119,218,102)); -#373=IFCINDEXEDPOLYGONALFACE((367,124,25)); -#374=IFCINDEXEDPOLYGONALFACE((327,325,326)); -#375=IFCINDEXEDPOLYGONALFACE((40,115,63)); -#376=IFCINDEXEDPOLYGONALFACE((321,248,247)); -#377=IFCINDEXEDPOLYGONALFACE((158,83,141)); -#378=IFCINDEXEDPOLYGONALFACE((13,98,277)); -#379=IFCINDEXEDPOLYGONALFACE((352,345,343,365)); -#380=IFCINDEXEDPOLYGONALFACE((5,374,1)); -#381=IFCINDEXEDPOLYGONALFACE((339,347,348,341)); -#382=IFCINDEXEDPOLYGONALFACE((135,87,22)); -#383=IFCINDEXEDPOLYGONALFACE((156,224,231)); -#384=IFCINDEXEDPOLYGONALFACE((163,63,170)); -#385=IFCINDEXEDPOLYGONALFACE((56,142,140)); -#386=IFCINDEXEDPOLYGONALFACE((362,355,356,363)); -#387=IFCINDEXEDPOLYGONALFACE((88,203,15)); -#388=IFCINDEXEDPOLYGONALFACE((24,163,73)); -#389=IFCINDEXEDPOLYGONALFACE((14,78,68)); -#390=IFCINDEXEDPOLYGONALFACE((248,260,258)); -#391=IFCINDEXEDPOLYGONALFACE((78,26,17)); -#392=IFCINDEXEDPOLYGONALFACE((16,17,53)); -#393=IFCINDEXEDPOLYGONALFACE((161,164,95)); -#394=IFCINDEXEDPOLYGONALFACE((291,287,293)); -#395=IFCINDEXEDPOLYGONALFACE((127,18,32)); -#396=IFCINDEXEDPOLYGONALFACE((182,199,148)); -#397=IFCINDEXEDPOLYGONALFACE((319,71,320)); -#398=IFCINDEXEDPOLYGONALFACE((225,232,312)); -#399=IFCINDEXEDPOLYGONALFACE((302,309,289)); -#400=IFCINDEXEDPOLYGONALFACE((13,36,11)); -#401=IFCINDEXEDPOLYGONALFACE((308,87,310)); -#402=IFCINDEXEDPOLYGONALFACE((353,348,347,246)); -#403=IFCINDEXEDPOLYGONALFACE((262,79,200)); -#404=IFCINDEXEDPOLYGONALFACE((131,73,135)); -#405=IFCINDEXEDPOLYGONALFACE((370,213,243)); -#406=IFCINDEXEDPOLYGONALFACE((92,100,91)); -#407=IFCINDEXEDPOLYGONALFACE((89,233,80)); -#408=IFCINDEXEDPOLYGONALFACE((332,165,174)); -#409=IFCINDEXEDPOLYGONALFACE((1,374,2)); -#410=IFCINDEXEDPOLYGONALFACE((28,368,209)); -#411=IFCINDEXEDPOLYGONALFACE((189,136,259)); -#412=IFCINDEXEDPOLYGONALFACE((326,332,327)); -#413=IFCINDEXEDPOLYGONALFACE((117,122,189)); -#414=IFCINDEXEDPOLYGONALFACE((132,16,40)); -#415=IFCINDEXEDPOLYGONALFACE((263,334,311)); -#416=IFCINDEXEDPOLYGONALFACE((134,183,68)); -#417=IFCINDEXEDPOLYGONALFACE((157,122,142)); -#418=IFCINDEXEDPOLYGONALFACE((239,230,97)); -#419=IFCINDEXEDPOLYGONALFACE((180,96,59)); -#420=IFCINDEXEDPOLYGONALFACE((99,113,111)); -#421=IFCINDEXEDPOLYGONALFACE((22,131,135)); -#422=IFCINDEXEDPOLYGONALFACE((321,249,349)); -#423=IFCINDEXEDPOLYGONALFACE((156,120,147)); -#424=IFCINDEXEDPOLYGONALFACE((148,181,182)); -#425=IFCINDEXEDPOLYGONALFACE((152,126,149)); -#426=IFCINDEXEDPOLYGONALFACE((346,340,337,344)); -#427=IFCINDEXEDPOLYGONALFACE((358,215,353,246)); -#428=IFCINDEXEDPOLYGONALFACE((275,89,80)); -#429=IFCINDEXEDPOLYGONALFACE((240,37,239)); -#430=IFCINDEXEDPOLYGONALFACE((14,183,34)); -#431=IFCINDEXEDPOLYGONALFACE((293,295,274)); -#432=IFCINDEXEDPOLYGONALFACE((350,351,344,342)); -#433=IFCINDEXEDPOLYGONALFACE((148,112,96)); -#434=IFCINDEXEDPOLYGONALFACE((313,325,264)); -#435=IFCINDEXEDPOLYGONALFACE((154,170,208)); -#436=IFCINDEXEDPOLYGONALFACE((226,123,46)); -#437=IFCINDEXEDPOLYGONALFACE((351,364,346,344)); -#438=IFCINDEXEDPOLYGONALFACE((355,362,216,357)); -#439=IFCINDEXEDPOLYGONALFACE((349,339,321)); -#440=IFCINDEXEDPOLYGONALFACE((318,324,327)); -#441=IFCINDEXEDPOLYGONALFACE((338,311,334,340)); -#442=IFCINDEXEDPOLYGONALFACE((326,299,302)); -#443=IFCINDEXEDPOLYGONALFACE((112,59,96)); -#444=IFCINDEXEDPOLYGONALFACE((262,198,242)); -#445=IFCINDEXEDPOLYGONALFACE((272,51,41)); -#446=IFCINDEXEDPOLYGONALFACE((318,261,315)); -#447=IFCINDEXEDPOLYGONALFACE((167,57,212)); -#448=IFCINDEXEDPOLYGONALFACE((271,266,255)); -#449=IFCINDEXEDPOLYGONALFACE((218,246,102)); -#450=IFCINDEXEDPOLYGONALFACE((94,179,185)); -#451=IFCINDEXEDPOLYGONALFACE((343,346,364,365)); -#452=IFCINDEXEDPOLYGONALFACE((40,153,132)); -#453=IFCINDEXEDPOLYGONALFACE((345,314,338,343)); -#454=IFCINDEXEDPOLYGONALFACE((8,121,204)); -#455=IFCINDEXEDPOLYGONALFACE((32,64,123)); -#456=IFCINDEXEDPOLYGONALFACE((88,109,82)); -#457=IFCINDEXEDPOLYGONALFACE((133,128,81)); -#458=IFCINDEXEDPOLYGONALFACE((193,319,320)); -#459=IFCINDEXEDPOLYGONALFACE((370,367,369)); -#460=IFCINDEXEDPOLYGONALFACE((6,9,42)); -#461=IFCINDEXEDPOLYGONALFACE((214,186,282)); -#462=IFCINDEXEDPOLYGONALFACE((200,75,166)); -#463=IFCINDEXEDPOLYGONALFACE((375,79,139)); -#464=IFCINDEXEDPOLYGONALFACE((95,309,333)); -#465=IFCINDEXEDPOLYGONALFACE((221,49,72)); -#466=IFCINDEXEDPOLYGONALFACE((36,273,11)); -#467=IFCINDEXEDPOLYGONALFACE((69,155,251)); -#468=IFCINDEXEDPOLYGONALFACE((316,302,289)); -#469=IFCINDEXEDPOLYGONALFACE((297,304,303)); -#470=IFCINDEXEDPOLYGONALFACE((195,159,196)); -#471=IFCINDEXEDPOLYGONALFACE((110,186,55)); -#472=IFCINDEXEDPOLYGONALFACE((323,324,315)); -#473=IFCINDEXEDPOLYGONALFACE((172,83,242)); -#474=IFCINDEXEDPOLYGONALFACE((61,219,82)); -#475=IFCINDEXEDPOLYGONALFACE((283,291,265)); -#476=IFCINDEXEDPOLYGONALFACE((184,175,177)); -#477=IFCINDEXEDPOLYGONALFACE((349,246,347)); -#478=IFCINDEXEDPOLYGONALFACE((174,166,75)); -#479=IFCINDEXEDPOLYGONALFACE((48,363,361)); -#480=IFCINDEXEDPOLYGONALFACE((199,237,46)); -#481=IFCINDEXEDPOLYGONALFACE((164,242,198)); -#482=IFCINDEXEDPOLYGONALFACE((290,317,335,336)); -#483=IFCINDEXEDPOLYGONALFACE((217,298,160)); -#484=IFCINDEXEDPOLYGONALFACE((193,200,79)); -#485=IFCINDEXEDPOLYGONALFACE((253,166,165)); -#486=IFCINDEXEDPOLYGONALFACE((202,116,51)); -#487=IFCINDEXEDPOLYGONALFACE((236,366,268)); -#488=IFCINDEXEDPOLYGONALFACE((170,73,163)); -#489=IFCINDEXEDPOLYGONALFACE((360,328,296)); -#490=IFCINDEXEDPOLYGONALFACE((354,350,348,353)); -#491=IFCINDEXEDPOLYGONALFACE((359,357,216,214)); -#492=IFCINDEXEDPOLYGONALFACE((143,110,125)); -#493=IFCINDEXEDPOLYGONALFACE((265,314,345,283)); -#494=IFCINDEXEDPOLYGONALFACE((252,261,260)); -#495=IFCINDEXEDPOLYGONALFACE((305,337,340,334)); -#496=IFCINDEXEDPOLYGONALFACE((131,116,24)); -#497=IFCINDEXEDPOLYGONALFACE((104,168,253)); -#498=IFCINDEXEDPOLYGONALFACE((126,99,111)); -#499=IFCINDEXEDPOLYGONALFACE((47,275,276)); -#500=IFCINDEXEDPOLYGONALFACE((230,120,97)); -#501=IFCINDEXEDPOLYGONALFACE((279,283,345,352)); -#502=IFCINDEXEDPOLYGONALFACE((67,89,275)); -#503=IFCINDEXEDPOLYGONALFACE((257,271,255)); -#504=IFCINDEXEDPOLYGONALFACE((257,231,224)); -#505=IFCINDEXEDPOLYGONALFACE((316,253,165)); -#506=IFCINDEXEDPOLYGONALFACE((17,3,53)); -#507=IFCINDEXEDPOLYGONALFACE((273,171,266)); -#508=IFCINDEXEDPOLYGONALFACE((260,270,258)); -#509=IFCINDEXEDPOLYGONALFACE((362,58,216)); -#510=IFCINDEXEDPOLYGONALFACE((48,108,107)); -#511=IFCINDEXEDPOLYGONALFACE((57,65,33)); -#512=IFCINDEXEDPOLYGONALFACE((160,172,164)); -#513=IFCINDEXEDPOLYGONALFACE((190,235,184)); -#514=IFCINDEXEDPOLYGONALFACE((354,353,215,361)); -#515=IFCINDEXEDPOLYGONALFACE((258,271,256)); -#516=IFCINDEXEDPOLYGONALFACE((155,366,251)); -#517=IFCINDEXEDPOLYGONALFACE((365,357,359,352)); -#518=IFCINDEXEDPOLYGONALFACE((169,20,26)); -#519=IFCINDEXEDPOLYGONALFACE((312,174,225)); -#520=IFCINDEXEDPOLYGONALFACE((273,43,11)); -#521=IFCINDEXEDPOLYGONALFACE((264,317,290)); -#522=IFCINDEXEDPOLYGONALFACE((287,296,293)); -#523=IFCINDEXEDPOLYGONALFACE((159,149,150)); -#524=IFCINDEXEDPOLYGONALFACE((267,305,334)); -#525=IFCINDEXEDPOLYGONALFACE((206,211,100)); -#526=IFCINDEXEDPOLYGONALFACE((126,150,149)); -#527=IFCINDEXEDPOLYGONALFACE((288,114,144)); -#528=IFCINDEXEDPOLYGONALFACE((266,101,273)); -#529=IFCINDEXEDPOLYGONALFACE((123,42,32)); -#530=IFCINDEXEDPOLYGONALFACE((255,171,231)); -#531=IFCINDEXEDPOLYGONALFACE((34,116,14)); -#532=IFCINDEXEDPOLYGONALFACE((91,3,92)); -#533=IFCINDEXEDPOLYGONALFACE((287,143,138)); -#534=IFCINDEXEDPOLYGONALFACE((77,12,71)); -#535=IFCINDEXEDPOLYGONALFACE((95,178,161)); -#536=IFCINDEXEDPOLYGONALFACE((285,280,281)); -#537=IFCINDEXEDPOLYGONALFACE((242,139,262)); -#538=IFCINDEXEDPOLYGONALFACE((332,318,327)); -#539=IFCINDEXEDPOLYGONALFACE((226,239,37)); -#540=IFCINDEXEDPOLYGONALFACE((175,219,137)); -#541=IFCINDEXEDPOLYGONALFACE((177,94,184)); -#542=IFCINDEXEDPOLYGONALFACE((103,226,37)); -#543=IFCINDEXEDPOLYGONALFACE((372,371,65)); -#544=IFCINDEXEDPOLYGONALFACE((341,335,244,339)); -#545=IFCINDEXEDPOLYGONALFACE((101,69,43)); -#546=IFCINDEXEDPOLYGONALFACE((146,192,182)); -#547=IFCINDEXEDPOLYGONALFACE((52,77,5)); -#548=IFCINDEXEDPOLYGONALFACE((133,60,52)); -#549=IFCINDEXEDPOLYGONALFACE((28,243,213)); -#550=IFCINDEXEDPOLYGONALFACE((110,126,125)); -#551=IFCINDEXEDPOLYGONALFACE((140,188,176)); -#552=IFCINDEXEDPOLYGONALFACE((341,342,336,335)); -#553=IFCINDEXEDPOLYGONALFACE((82,131,61)); -#554=IFCINDEXEDPOLYGONALFACE((290,336,337,305)); -#555=IFCINDEXEDPOLYGONALFACE((109,51,116)); -#556=IFCINDEXEDPOLYGONALFACE((210,29,90)); -#557=IFCINDEXEDPOLYGONALFACE((45,30,21)); -#558=IFCINDEXEDPOLYGONALFACE((204,196,8)); -#559=IFCINDEXEDPOLYGONALFACE((229,238,237)); -#560=IFCINDEXEDPOLYGONALFACE((161,217,160)); -#561=IFCINDEXEDPOLYGONALFACE((305,264,290)); -#562=IFCINDEXEDPOLYGONALFACE((84,60,81)); -#563=IFCINDEXEDPOLYGONALFACE((185,190,184)); -#564=IFCINDEXEDPOLYGONALFACE((5,133,52)); -#565=IFCINDEXEDPOLYGONALFACE((189,187,117)); -#566=IFCINDEXEDPOLYGONALFACE((226,237,238)); -#567=IFCINDEXEDPOLYGONALFACE((23,277,197)); -#568=IFCINDEXEDPOLYGONALFACE((76,8,27)); -#569=IFCINDEXEDPOLYGONALFACE((294,274,295)); -#570=IFCINDEXEDPOLYGONALFACE((145,114,107)); -#571=IFCINDEXEDPOLYGONALFACE((188,44,10)); -#572=IFCINDEXEDPOLYGONALFACE((41,203,85)); -#573=IFCINDEXEDPOLYGONALFACE((13,43,86)); -#574=IFCINDEXEDPOLYGONALFACE((355,364,351,356)); -#575=IFCINDEXEDPOLYGONALFACE((234,125,177)); -#576=IFCINDEXEDPOLYGONALFACE((40,38,50)); -#577=IFCINDEXEDPOLYGONALFACE((272,85,20)); -#578=IFCINDEXEDPOLYGONALFACE((215,48,361)); -#579=IFCINDEXEDPOLYGONALFACE((39,241,301)); -#580=IFCINDEXEDPOLYGONALFACE((311,292,263)); -#581=IFCINDEXEDPOLYGONALFACE((69,86,43)); -#582=IFCINDEXEDPOLYGONALFACE((310,161,178)); -#583=IFCINDEXEDPOLYGONALFACE((202,169,78)); -#584=IFCINDEXEDPOLYGONALFACE((248,250,247)); -#585=IFCINDEXEDPOLYGONALFACE((296,138,360)); -#586=IFCINDEXEDPOLYGONALFACE((42,9,23)); -#587=IFCINDEXEDPOLYGONALFACE((203,206,85)); -#588=IFCINDEXEDPOLYGONALFACE((202,272,169)); -#589=IFCINDEXEDPOLYGONALFACE((342,344,337,336)); -#590=IFCINDEXEDPOLYGONALFACE((129,35,19)); -#591=IFCINDEXEDPOLYGONALFACE((2,162,191)); -#592=IFCINDEXEDPOLYGONALFACE((366,306,98)); -#593=IFCINDEXEDPOLYGONALFACE((361,363,356,354)); -#594=IFCINDEXEDPOLYGONALFACE((68,17,134)); -#595=IFCINDEXEDPOLYGONALFACE((54,173,201)); -#596=IFCINDEXEDPOLYGONALFACE((210,167,151)); -#597=IFCINDEXEDPOLYGONALFACE((156,171,97)); -#598=IFCINDEXEDPOLYGONALFACE((54,151,93)); -#599=IFCINDEXEDPOLYGONALFACE((59,8,196)); -#600=IFCINDEXEDPOLYGONALFACE((213,210,90)); -#601=IFCINDEXEDPOLYGONALFACE((54,371,373)); -#602=IFCINDEXEDPOLYGONALFACE((130,243,209)); -#603=IFCINDEXEDPOLYGONALFACE((359,214,282,280)); -#604=IFCINDEXEDPOLYGONALFACE((142,117,188)); -#605=IFCINDEXEDPOLYGONALFACE((28,367,368)); -#606=IFCINDEXEDPOLYGONALFACE((237,228,229)); -#607=IFCINDEXEDPOLYGONALFACE((362,105,99)); -#608=IFCINDEXEDPOLYGONALFACE((291,314,265)); -#609=IFCINDEXEDPOLYGONALFACE((45,70,18)); -#610=IFCINDEXEDPOLYGONALFACE((210,372,167)); -#611=IFCINDEXEDPOLYGONALFACE((62,63,176)); -#612=IFCINDEXEDPOLYGONALFACE((91,19,35)); -#613=IFCINDEXEDPOLYGONALFACE((206,203,211)); -#614=IFCINDEXEDPOLYGONALFACE((269,260,261)); -#615=IFCINDEXEDPOLYGONALFACE((53,35,129)); -#616=IFCINDEXEDPOLYGONALFACE((54,29,151)); -#617=IFCINDEXEDPOLYGONALFACE((130,368,370)); -#618=IFCINDEXEDPOLYGONALFACE((67,187,189)); -#619=IFCINDEXEDPOLYGONALFACE((371,25,124)); -#620=IFCINDEXEDPOLYGONALFACE((130,209,368)); -#621=IFCINDEXEDPOLYGONALFACE((243,130,370)); -#622=IFCINDEXEDPOLYGONALFACE((213,227,210)); -#623=IFCINDEXEDPOLYGONALFACE((227,372,210)); -#624=IFCINDEXEDPOLYGONALFACE((167,93,151)); -#625=IFCINDEXEDPOLYGONALFACE((372,227,25)); -#626=IFCINDEXEDPOLYGONALFACE((373,29,54)); -#627=IFCINDEXEDPOLYGONALFACE((213,369,227)); -#628=IFCINDEXEDPOLYGONALFACE((371,124,373)); -#629=IFCINDEXEDPOLYGONALFACE((341,348,350,342)); -#630=IFCINDEXEDPOLYGONALFACE((135,66,217)); -#631=IFCINDEXEDPOLYGONALFACE((65,371,33)); -#632=IFCINDEXEDPOLYGONALFACE((350,354,356,351)); -#633=IFCINDEXEDPOLYGONALFACE((333,330,178)); -#634=IFCINDEXEDPOLYGONALFACE((315,254,323)); -#635=IFCINDEXEDPOLYGONALFACE((127,12,30)); -#636=IFCINDEXEDPOLYGONALFACE((100,128,31)); -#637=IFCINDEXEDPOLYGONALFACE((319,5,77)); -#638=IFCINDEXEDPOLYGONALFACE((374,158,2)); -#639=IFCINDEXEDPOLYGONALFACE((375,83,374)); -#640=IFCINDEXEDPOLYGONALFACE((314,274,311)); -#641=IFCINDEXEDPOLYGONALFACE((21,4,52)); -#642=IFCINDEXEDPOLYGONALFACE((288,144,180)); -#643=IFCINDEXEDPOLYGONALFACE((241,137,219)); -#644=IFCINDEXEDPOLYGONALFACE((60,76,45)); -#645=IFCINDEXEDPOLYGONALFACE((10,62,176)); -#646=IFCINDEXEDPOLYGONALFACE((220,147,106)); -#647=IFCINDEXEDPOLYGONALFACE((90,29,373)); -#648=IFCINDEXEDPOLYGONALFACE((70,148,199)); -#649=IFCINDEXEDPOLYGONALFACE((103,37,36)); -#650=IFCINDEXEDPOLYGONALFACE((71,197,306)); -#651=IFCINDEXEDPOLYGONALFACE((117,187,44)); -#652=IFCINDEXEDPOLYGONALFACE((62,44,56)); -#653=IFCINDEXEDPOLYGONALFACE((254,252,244)); -#654=IFCINDEXEDPOLYGONALFACE((59,196,159)); -#655=IFCINDEXEDPOLYGONALFACE((158,141,154)); -#656=IFCINDEXEDPOLYGONALFACE((300,301,241)); -#657=IFCINDEXEDPOLYGONALFACE((23,127,32)); -#658=IFCINDEXEDPOLYGONALFACE((309,303,304)); -#659=IFCINDEXEDPOLYGONALFACE((295,329,304)); -#660=IFCINDEXEDPOLYGONALFACE((369,367,25)); -#661=IFCINDEXEDPOLYGONALFACE((119,102,106)); -#662=IFCINDEXEDPOLYGONALFACE((232,269,318)); -#663=IFCINDEXEDPOLYGONALFACE((208,170,63)); -#664=IFCINDEXEDPOLYGONALFACE((239,97,171)); -#665=IFCINDEXEDPOLYGONALFACE((124,28,213)); -#666=IFCINDEXEDPOLYGONALFACE((268,155,75)); -#667=IFCINDEXEDPOLYGONALFACE((101,270,269)); -#668=IFCINDEXEDPOLYGONALFACE((277,9,7)); -#669=IFCINDEXEDPOLYGONALFACE((320,306,236)); -#670=IFCINDEXEDPOLYGONALFACE((222,193,236)); -#671=IFCINDEXEDPOLYGONALFACE((173,115,50)); -#672=IFCINDEXEDPOLYGONALFACE((299,313,267)); -#673=IFCINDEXEDPOLYGONALFACE((162,207,212)); -#674=IFCINDEXEDPOLYGONALFACE((98,306,197)); -#675=IFCINDEXEDPOLYGONALFACE((295,296,328)); -#676=IFCINDEXEDPOLYGONALFACE((84,81,128)); -#677=IFCINDEXEDPOLYGONALFACE((302,299,297)); -#678=IFCINDEXEDPOLYGONALFACE((212,115,173)); -#679=IFCINDEXEDPOLYGONALFACE((317,323,254)); -#680=IFCINDEXEDPOLYGONALFACE((211,205,204)); -#681=IFCINDEXEDPOLYGONALFACE((39,177,175)); -#682=IFCINDEXEDPOLYGONALFACE((334,263,292)); -#683=IFCINDEXEDPOLYGONALFACE((283,279,286)); -#684=IFCINDEXEDPOLYGONALFACE((129,38,16)); -#685=IFCINDEXEDPOLYGONALFACE((102,349,249)); -#686=IFCINDEXEDPOLYGONALFACE((197,71,12)); -#687=IFCINDEXEDPOLYGONALFACE((330,331,310)); -#688=IFCINDEXEDPOLYGONALFACE((300,308,310)); -#689=IFCINDEXEDPOLYGONALFACE((205,203,190)); -#690=IFCINDEXEDPOLYGONALFACE((133,1,2)); -#691=IFCINDEXEDPOLYGONALFACE((85,206,92)); -#692=IFCINDEXEDPOLYGONALFACE((360,234,39)); -#693=IFCINDEXEDPOLYGONALFACE((122,157,47)); -#694=IFCINDEXEDPOLYGONALFACE((281,280,282)); -#695=IFCINDEXEDPOLYGONALFACE((250,220,249)); -#696=IFCINDEXEDPOLYGONALFACE((58,55,214)); -#697=IFCINDEXEDPOLYGONALFACE((234,360,138)); -#698=IFCINDEXEDPOLYGONALFACE((141,172,298)); -#699=IFCINDEXEDPOLYGONALFACE((27,112,45)); -#700=IFCINDEXEDPOLYGONALFACE((146,182,181)); -#701=IFCINDEXEDPOLYGONALFACE((144,145,181)); -#702=IFCINDEXEDPOLYGONALFACE((195,194,185)); -#703=IFCINDEXEDPOLYGONALFACE((228,221,223)); -#704=IFCINDEXEDPOLYGONALFACE((49,215,358)); -#705=IFCINDEXEDPOLYGONALFACE((74,163,34)); -#706=IFCINDEXEDPOLYGONALFACE((221,72,218)); -#707=IFCINDEXEDPOLYGONALFACE((146,145,107)); -#708=IFCINDEXEDPOLYGONALFACE((194,195,204)); -#709=IFCINDEXEDPOLYGONALFACE((46,123,64)); -#710=IFCINDEXEDPOLYGONALFACE((366,98,86)); -#711=IFCINDEXEDPOLYGONALFACE((48,107,114)); -#712=IFCINDEXEDPOLYGONALFACE((198,104,95)); -#713=IFCINDEXEDPOLYGONALFACE((74,183,132)); -#714=IFCINDEXEDPOLYGONALFACE((21,30,12)); -#715=IFCINDEXEDPOLYGONALFACE((288,150,111)); -#716=IFCINDEXEDPOLYGONALFACE((75,155,225)); -#717=IFCINDEXEDPOLYGONALFACE((166,168,262)); -#718=IFCINDEXEDPOLYGONALFACE((223,119,230)); -#719=IFCINDEXEDPOLYGONALFACE((26,20,92)); -#720=IFCINDEXEDPOLYGONALFACE((219,235,88)); -#721=IFCINDEXEDPOLYGONALFACE((322,264,325)); -#722=IFCINDEXEDPOLYGONALFACE((257,224,220)); -#723=IFCINDEXEDPOLYGONALFACE((289,309,104)); -#724=IFCINDEXEDPOLYGONALFACE((228,146,108)); -#725=IFCINDEXEDPOLYGONALFACE((119,223,218)); -#726=IFCINDEXEDPOLYGONALFACE((367,28,124)); -#727=IFCINDEXEDPOLYGONALFACE((327,324,325)); -#728=IFCINDEXEDPOLYGONALFACE((40,50,115)); -#729=IFCINDEXEDPOLYGONALFACE((321,252,248)); -#730=IFCINDEXEDPOLYGONALFACE((13,86,98)); -#731=IFCINDEXEDPOLYGONALFACE((5,375,374)); -#732=IFCINDEXEDPOLYGONALFACE((135,217,87)); -#733=IFCINDEXEDPOLYGONALFACE((156,147,224)); -#734=IFCINDEXEDPOLYGONALFACE((163,74,63)); -#735=IFCINDEXEDPOLYGONALFACE((56,157,142)); -#736=IFCINDEXEDPOLYGONALFACE((88,190,203)); -#737=IFCINDEXEDPOLYGONALFACE((24,34,163)); -#738=IFCINDEXEDPOLYGONALFACE((14,202,78)); -#739=IFCINDEXEDPOLYGONALFACE((248,252,260)); -#740=IFCINDEXEDPOLYGONALFACE((78,169,26)); -#741=IFCINDEXEDPOLYGONALFACE((16,134,17)); -#742=IFCINDEXEDPOLYGONALFACE((161,160,164)); -#743=IFCINDEXEDPOLYGONALFACE((291,284,287)); -#744=IFCINDEXEDPOLYGONALFACE((127,30,18)); -#745=IFCINDEXEDPOLYGONALFACE((182,192,199)); -#746=IFCINDEXEDPOLYGONALFACE((319,77,71)); -#747=IFCINDEXEDPOLYGONALFACE((225,69,232)); -#748=IFCINDEXEDPOLYGONALFACE((302,303,309)); -#749=IFCINDEXEDPOLYGONALFACE((13,7,36)); -#750=IFCINDEXEDPOLYGONALFACE((308,22,87)); -#751=IFCINDEXEDPOLYGONALFACE((262,139,79)); -#752=IFCINDEXEDPOLYGONALFACE((131,24,73)); -#753=IFCINDEXEDPOLYGONALFACE((370,369,213)); -#754=IFCINDEXEDPOLYGONALFACE((92,206,100)); -#755=IFCINDEXEDPOLYGONALFACE((89,136,233)); -#756=IFCINDEXEDPOLYGONALFACE((332,316,165)); -#757=IFCINDEXEDPOLYGONALFACE((189,122,136)); -#758=IFCINDEXEDPOLYGONALFACE((326,316,332)); -#759=IFCINDEXEDPOLYGONALFACE((117,142,122)); -#760=IFCINDEXEDPOLYGONALFACE((132,134,16)); -#761=IFCINDEXEDPOLYGONALFACE((134,132,183)); -#762=IFCINDEXEDPOLYGONALFACE((239,238,230)); -#763=IFCINDEXEDPOLYGONALFACE((180,181,96)); -#764=IFCINDEXEDPOLYGONALFACE((99,105,113)); -#765=IFCINDEXEDPOLYGONALFACE((22,61,131)); -#766=IFCINDEXEDPOLYGONALFACE((321,247,249)); -#767=IFCINDEXEDPOLYGONALFACE((156,97,120)); -#768=IFCINDEXEDPOLYGONALFACE((148,96,181)); -#769=IFCINDEXEDPOLYGONALFACE((152,125,126)); -#770=IFCINDEXEDPOLYGONALFACE((240,36,37)); -#771=IFCINDEXEDPOLYGONALFACE((14,68,183)); -#772=IFCINDEXEDPOLYGONALFACE((293,296,295)); -#773=IFCINDEXEDPOLYGONALFACE((148,70,112)); -#774=IFCINDEXEDPOLYGONALFACE((313,299,325)); -#775=IFCINDEXEDPOLYGONALFACE((154,66,170)); -#776=IFCINDEXEDPOLYGONALFACE((226,6,123)); -#777=IFCINDEXEDPOLYGONALFACE((349,347,339)); -#778=IFCINDEXEDPOLYGONALFACE((318,315,324)); -#779=IFCINDEXEDPOLYGONALFACE((326,325,299)); -#780=IFCINDEXEDPOLYGONALFACE((112,27,59)); -#781=IFCINDEXEDPOLYGONALFACE((262,168,198)); -#782=IFCINDEXEDPOLYGONALFACE((272,202,51)); -#783=IFCINDEXEDPOLYGONALFACE((318,269,261)); -#784=IFCINDEXEDPOLYGONALFACE((167,65,57)); -#785=IFCINDEXEDPOLYGONALFACE((271,270,266)); -#786=IFCINDEXEDPOLYGONALFACE((218,72,246)); -#787=IFCINDEXEDPOLYGONALFACE((94,149,179)); -#788=IFCINDEXEDPOLYGONALFACE((40,62,153)); -#789=IFCINDEXEDPOLYGONALFACE((8,84,121)); -#790=IFCINDEXEDPOLYGONALFACE((32,18,64)); -#791=IFCINDEXEDPOLYGONALFACE((88,15,109)); -#792=IFCINDEXEDPOLYGONALFACE((133,31,128)); -#793=IFCINDEXEDPOLYGONALFACE((193,79,319)); -#794=IFCINDEXEDPOLYGONALFACE((370,368,367)); -#795=IFCINDEXEDPOLYGONALFACE((6,103,9)); -#796=IFCINDEXEDPOLYGONALFACE((214,55,186)); -#797=IFCINDEXEDPOLYGONALFACE((200,222,75)); -#798=IFCINDEXEDPOLYGONALFACE((375,319,79)); -#799=IFCINDEXEDPOLYGONALFACE((95,104,309)); -#800=IFCINDEXEDPOLYGONALFACE((221,108,49)); -#801=IFCINDEXEDPOLYGONALFACE((36,240,273)); -#802=IFCINDEXEDPOLYGONALFACE((69,225,155)); -#803=IFCINDEXEDPOLYGONALFACE((316,326,302)); -#804=IFCINDEXEDPOLYGONALFACE((297,294,304)); -#805=IFCINDEXEDPOLYGONALFACE((195,179,159)); -#806=IFCINDEXEDPOLYGONALFACE((110,281,186)); -#807=IFCINDEXEDPOLYGONALFACE((323,322,324)); -#808=IFCINDEXEDPOLYGONALFACE((172,141,83)); -#809=IFCINDEXEDPOLYGONALFACE((61,307,219)); -#810=IFCINDEXEDPOLYGONALFACE((283,284,291)); -#811=IFCINDEXEDPOLYGONALFACE((184,235,175)); -#812=IFCINDEXEDPOLYGONALFACE((349,102,246)); -#813=IFCINDEXEDPOLYGONALFACE((174,165,166)); -#814=IFCINDEXEDPOLYGONALFACE((48,105,363)); -#815=IFCINDEXEDPOLYGONALFACE((199,192,237)); -#816=IFCINDEXEDPOLYGONALFACE((164,172,242)); -#817=IFCINDEXEDPOLYGONALFACE((217,66,298)); -#818=IFCINDEXEDPOLYGONALFACE((193,222,200)); -#819=IFCINDEXEDPOLYGONALFACE((253,168,166)); -#820=IFCINDEXEDPOLYGONALFACE((202,14,116)); -#821=IFCINDEXEDPOLYGONALFACE((236,306,366)); -#822=IFCINDEXEDPOLYGONALFACE((170,66,73)); -#823=IFCINDEXEDPOLYGONALFACE((360,300,328)); -#824=IFCINDEXEDPOLYGONALFACE((143,285,110)); -#825=IFCINDEXEDPOLYGONALFACE((252,254,261)); -#826=IFCINDEXEDPOLYGONALFACE((131,109,116)); -#827=IFCINDEXEDPOLYGONALFACE((104,198,168)); -#828=IFCINDEXEDPOLYGONALFACE((126,58,99)); -#829=IFCINDEXEDPOLYGONALFACE((47,67,275)); -#830=IFCINDEXEDPOLYGONALFACE((230,119,120)); -#831=IFCINDEXEDPOLYGONALFACE((67,259,89)); -#832=IFCINDEXEDPOLYGONALFACE((257,256,271)); -#833=IFCINDEXEDPOLYGONALFACE((257,255,231)); -#834=IFCINDEXEDPOLYGONALFACE((316,289,253)); -#835=IFCINDEXEDPOLYGONALFACE((17,26,3)); -#836=IFCINDEXEDPOLYGONALFACE((273,240,171)); -#837=IFCINDEXEDPOLYGONALFACE((362,99,58)); -#838=IFCINDEXEDPOLYGONALFACE((48,49,108)); -#839=IFCINDEXEDPOLYGONALFACE((160,298,172)); -#840=IFCINDEXEDPOLYGONALFACE((190,88,235)); -#841=IFCINDEXEDPOLYGONALFACE((258,270,271)); -#842=IFCINDEXEDPOLYGONALFACE((155,268,366)); -#843=IFCINDEXEDPOLYGONALFACE((169,272,20)); -#844=IFCINDEXEDPOLYGONALFACE((312,332,174)); -#845=IFCINDEXEDPOLYGONALFACE((273,101,43)); -#846=IFCINDEXEDPOLYGONALFACE((264,322,317)); -#847=IFCINDEXEDPOLYGONALFACE((287,138,296)); -#848=IFCINDEXEDPOLYGONALFACE((159,179,149)); -#849=IFCINDEXEDPOLYGONALFACE((267,313,305)); -#850=IFCINDEXEDPOLYGONALFACE((126,111,150)); -#851=IFCINDEXEDPOLYGONALFACE((288,113,114)); -#852=IFCINDEXEDPOLYGONALFACE((266,270,101)); -#853=IFCINDEXEDPOLYGONALFACE((123,6,42)); -#854=IFCINDEXEDPOLYGONALFACE((255,266,171)); -#855=IFCINDEXEDPOLYGONALFACE((34,24,116)); -#856=IFCINDEXEDPOLYGONALFACE((91,35,3)); -#857=IFCINDEXEDPOLYGONALFACE((287,285,143)); -#858=IFCINDEXEDPOLYGONALFACE((77,4,12)); -#859=IFCINDEXEDPOLYGONALFACE((95,333,178)); -#860=IFCINDEXEDPOLYGONALFACE((285,279,280)); -#861=IFCINDEXEDPOLYGONALFACE((242,83,139)); -#862=IFCINDEXEDPOLYGONALFACE((332,312,318)); -#863=IFCINDEXEDPOLYGONALFACE((226,238,239)); -#864=IFCINDEXEDPOLYGONALFACE((175,235,219)); -#865=IFCINDEXEDPOLYGONALFACE((177,152,94)); -#866=IFCINDEXEDPOLYGONALFACE((103,6,226)); -#867=IFCINDEXEDPOLYGONALFACE((372,25,371)); -#868=IFCINDEXEDPOLYGONALFACE((101,232,69)); -#869=IFCINDEXEDPOLYGONALFACE((146,228,192)); -#870=IFCINDEXEDPOLYGONALFACE((52,4,77)); -#871=IFCINDEXEDPOLYGONALFACE((133,81,60)); -#872=IFCINDEXEDPOLYGONALFACE((28,209,243)); -#873=IFCINDEXEDPOLYGONALFACE((110,58,126)); -#874=IFCINDEXEDPOLYGONALFACE((140,142,188)); -#875=IFCINDEXEDPOLYGONALFACE((82,109,131)); -#876=IFCINDEXEDPOLYGONALFACE((109,15,51)); -#877=IFCINDEXEDPOLYGONALFACE((210,151,29)); -#878=IFCINDEXEDPOLYGONALFACE((45,18,30)); -#879=IFCINDEXEDPOLYGONALFACE((204,195,196)); -#880=IFCINDEXEDPOLYGONALFACE((229,230,238)); -#881=IFCINDEXEDPOLYGONALFACE((161,87,217)); -#882=IFCINDEXEDPOLYGONALFACE((305,313,264)); -#883=IFCINDEXEDPOLYGONALFACE((84,76,60)); -#884=IFCINDEXEDPOLYGONALFACE((185,194,190)); -#885=IFCINDEXEDPOLYGONALFACE((5,1,133)); -#886=IFCINDEXEDPOLYGONALFACE((226,46,237)); -#887=IFCINDEXEDPOLYGONALFACE((23,9,277)); -#888=IFCINDEXEDPOLYGONALFACE((76,84,8)); -#889=IFCINDEXEDPOLYGONALFACE((294,267,274)); -#890=IFCINDEXEDPOLYGONALFACE((145,144,114)); -#891=IFCINDEXEDPOLYGONALFACE((41,15,203)); -#892=IFCINDEXEDPOLYGONALFACE((13,11,43)); -#893=IFCINDEXEDPOLYGONALFACE((234,143,125)); -#894=IFCINDEXEDPOLYGONALFACE((40,16,38)); -#895=IFCINDEXEDPOLYGONALFACE((272,41,85)); -#896=IFCINDEXEDPOLYGONALFACE((215,49,48)); -#897=IFCINDEXEDPOLYGONALFACE((39,137,241)); -#898=IFCINDEXEDPOLYGONALFACE((311,274,292)); -#899=IFCINDEXEDPOLYGONALFACE((69,251,86)); -#900=IFCINDEXEDPOLYGONALFACE((310,87,161)); -#901=IFCINDEXEDPOLYGONALFACE((248,256,250)); -#902=IFCINDEXEDPOLYGONALFACE((68,78,17)); -#903=IFCINDEXEDPOLYGONALFACE((156,231,171)); -#904=IFCINDEXEDPOLYGONALFACE((59,27,8)); -#905=IFCINDEXEDPOLYGONALFACE((54,33,371)); -#906=IFCINDEXEDPOLYGONALFACE((237,192,228)); -#907=IFCINDEXEDPOLYGONALFACE((362,363,105)); -#908=IFCINDEXEDPOLYGONALFACE((291,293,314)); -#909=IFCINDEXEDPOLYGONALFACE((45,112,70)); -#910=IFCINDEXEDPOLYGONALFACE((62,40,63)); -#911=IFCINDEXEDPOLYGONALFACE((91,31,19)); -#912=IFCINDEXEDPOLYGONALFACE((269,270,260)); -#913=IFCINDEXEDPOLYGONALFACE((53,3,35)); -#914=IFCINDEXEDPOLYGONALFACE((67,47,187)); -#915=IFCINDEXEDPOLYGONALFACE((135,73,66)); -#916=IFCINDEXEDPOLYGONALFACE((333,329,330)); -#917=IFCINDEXEDPOLYGONALFACE((315,261,254)); -#918=IFCINDEXEDPOLYGONALFACE((127,23,12)); -#919=IFCINDEXEDPOLYGONALFACE((100,121,128)); -#920=IFCINDEXEDPOLYGONALFACE((319,375,5)); -#921=IFCINDEXEDPOLYGONALFACE((374,83,158)); -#922=IFCINDEXEDPOLYGONALFACE((375,139,83)); -#923=IFCINDEXEDPOLYGONALFACE((314,293,274)); -#924=IFCCARTESIANPOINTLIST3D(((-0.0757642686367035,-0.0121694896370173,0.220662087202072),(-0.105255022644997,-0.0141069469973445,0.230906546115875),(-0.164038479328156,-0.0962571799755096,0.263201057910919),(-0.0149683114141226,-0.0434482358396053,0.228664547204971),(-0.0426693223416805,-0.0120228659361601,0.222334340214729),(0.0788992568850517,-0.0767349451780319,0.173714026808739),(0.0953715369105339,-0.0409212671220303,0.16986283659935),(-0.0719772353768349,-0.0949608311057091,0.171763256192207),(0.0735535696148872,-0.0462111458182335,0.199328601360321),(-0.160245850682259,0.0397466160356998,0.298533588647842),(0.106730677187443,-0.0124975387006998,0.138676866889),(0.0139651391655207,-0.0423045344650745,0.229461222887039),(0.0967235639691353,-0.0144418459385633,0.168111309409142),(-0.219927728176117,-0.0414205342531204,0.239053592085838),(-0.198184996843338,-0.0742136090993881,0.172668352723122),(-0.162167191505432,-0.0434498824179173,0.289568781852722),(-0.189809292554855,-0.0716947764158249,0.281713783740997),(0.0152298724278808,-0.0849794447422028,0.205268412828445),(-0.123513199388981,-0.0452961064875126,0.264716774225235),(-0.188629180192947,-0.119135543704033,0.233101561665535),(-0.0130218090489507,-0.0651145428419113,0.222954735159874),(-0.196876853704453,0.0119782146066427,0.138698890805244),(0.0431601963937283,-0.0451620146632195,0.22145189344883),(-0.216075524687767,-0.016599427908659,0.204968154430389),(-0.0582821778953075,0.0224160328507423,0.331800371408463),(-0.190823614597321,-0.102445237338543,0.260164886713028),(-0.0431380830705166,-0.0991964489221573,0.176975786685944),(-0.0522686094045639,0.0494366958737373,0.351232975721359),(-0.0895938724279404,0.0322130136191845,0.318689584732056),(0.013082567602396,-0.0668555349111557,0.223062723875046),(-0.106145963072777,-0.0415130592882633,0.22882467508316),(0.0448657646775246,-0.0776780471205711,0.203667193651199),(-0.10371295362711,-0.00366749544627964,0.314385384321213),(-0.21360756456852,-0.0169711355119944,0.233581200242043),(-0.138989388942719,-0.0749303176999092,0.265050023794174),(0.105769321322441,-0.0415658876299858,0.138697892427444),(0.0992072820663452,-0.0677607133984566,0.138679757714272),(-0.135680645704269,-0.0402409471571445,0.287896603345871),(-0.17496183514595,-0.0425181090831757,0.0743281096220016),(-0.161954745650291,-0.0129314502701163,0.289540559053421),(-0.208628505468369,-0.103418782353401,0.201527774333954),(0.0640031322836876,-0.0677034556865692,0.197900995612144),(0.100172616541386,0.0126537960022688,0.138708665966988),(-0.168615952134132,0.0482185557484627,0.30722576379776),(-0.0140691194683313,-0.0847146064043045,0.205532997846603),(0.0702492073178291,-0.1020467877388,0.138582319021225),(-0.181213811039925,0.0992056727409363,0.328065633773804),(-0.0152021609246731,-0.112156376242638,0.0183885656297207),(0.0162124074995518,-0.111216500401497,0.021827794611454),(-0.133747041225433,-0.0159911345690489,0.290624916553497),(-0.216561943292618,-0.0709330290555954,0.202728658914566),(-0.0427242144942284,-0.0426300838589668,0.222017183899879),(-0.159124106168747,-0.0738818794488907,0.283847242593765),(-0.103956542909145,0.0154779236763716,0.320181280374527),(-0.136982098221779,-0.102321907877922,0.0194435473531485),(-0.183684900403023,0.0396271869540215,0.295159220695496),(-0.107928916811943,-0.010153891518712,0.291135489940643),(-0.103886745870113,-0.101836994290352,0.0180104468017817),(-0.0461161360144615,-0.119219377636909,0.138967230916023),(-0.0461340732872486,-0.061420276761055,0.21500451862812),(-0.211329713463783,-0.0169732719659805,0.138692498207092),(-0.165825873613358,0.0170033983886242,0.294365167617798),(-0.162926822900772,0.0167535953223705,0.259086668491364),(0.044605728238821,-0.0985531806945801,0.171382486820221),(-0.0834082290530205,0.00335463741794229,0.315553486347198),(-0.15971240401268,0.0247225016355515,0.197611734271049),(-0.16489240527153,0.105032727122307,0.322820842266083),(-0.215148985385895,-0.0462404675781727,0.266269713640213),(0.074162483215332,0.0414574705064297,0.138786911964417),(0.0142031144350767,-0.105447888374329,0.170478105545044),(0.0141690038144588,-0.0131895141676068,0.229208543896675),(0.0433205515146255,-0.101634204387665,0.0178499221801758),(-0.194831639528275,0.00855887122452259,0.19867131114006),(-0.190071240067482,0.00837886054068804,0.263859361410141),(0.0146396514028311,0.0503562577068806,0.171330958604813),(-0.0466328002512455,-0.0789417400956154,0.203323245048523),(-0.0142267476767302,-0.0157651714980602,0.22864143550396),(-0.214272990822792,-0.0700500085949898,0.258544147014618),(-0.0187377445399761,0.0234869290143251,0.211539566516876),(-0.169090524315834,0.130419373512268,0.343455374240875),(-0.0730840340256691,-0.0585213899612427,0.211252138018608),(-0.211533859372139,-0.0429056100547314,0.138715773820877),(-0.0739177912473679,0.0154376216232777,0.210008263587952),(-0.07377789914608,-0.0735882744193077,0.200627535581589),(-0.186267927289009,-0.121167339384556,0.205986142158508),(0.0892870724201202,0.0163372419774532,0.167569145560265),(-0.163796290755272,0.0387952998280525,0.138641089200974),(-0.197594255208969,-0.07469642162323,0.138668864965439),(-0.157580107450485,0.132616892457008,0.328512966632843),(-0.0735077708959579,0.0393004417419434,0.326341509819031),(-0.133432641625404,-0.0800390690565109,0.240147277712822),(-0.161642774939537,-0.107512913644314,0.235317841172218),(-0.103187024593353,0.0151489116251469,0.293316811323166),(-0.131257891654968,-0.0962524563074112,0.0883080363273621),(-0.0977480411529541,0.0540151223540306,0.138882651925087),(-0.015323237515986,-0.12871652841568,0.138334348797798),(0.102820813655853,-0.0720862969756126,0.0782168358564377),(0.0691742300987244,0.00961552746593952,0.196848139166832),(-0.0784864947199821,-0.104707300662994,0.0244421008974314),(-0.129387423396111,-0.0837726294994354,0.201711267232895),(0.10028512775898,0.0147631969302893,0.106750056147575),(0.0725274235010147,-0.0733503252267838,0.0162904672324657),(0.0907945036888123,-0.0631996393203735,0.166820541024208),(-0.0685850381851196,0.0688069462776184,0.138255223631859),(-0.0430277064442635,-0.107757613062859,0.022122398018837),(0.102449595928192,-0.0650743395090103,0.0278087817132473),(-0.0123228346928954,-0.128916323184967,0.0516869872808456),(0.0133168455213308,-0.126367673277855,0.0497013293206692),(-0.211436733603477,-0.0425778105854988,0.171008050441742),(-0.135128378868103,-0.0737440511584282,0.028781833127141),(-0.0713493376970291,-0.0974928066134453,0.048680767416954),(-0.0144545361399651,-0.10740352421999,0.169533520936966),(-0.0520200654864311,-0.106458351016045,0.0468626022338867),(-0.0383422300219536,-0.121899470686913,0.0537898242473602),(-0.135303497314453,0.00472360569983721,0.269406676292419),(-0.222012773156166,-0.0435851588845253,0.201951056718826),(-0.150152832269669,0.0706916153430939,0.296226799488068),(-0.205232128500938,-0.0530128739774227,0.172492980957031),(0.0815067514777184,-0.0842671692371368,0.0463023483753204),(0.101917430758476,-0.0744422674179077,0.0511590167880058),(-0.104162633419037,-0.0769466981291771,0.197300210595131),(-0.165175527334213,0.100392691791058,0.295828104019165),(0.0624474883079529,-0.0914158597588539,0.172223627567291),(-0.0696270391345024,0.0371879562735558,0.345104366540909),(-0.129096910357475,-0.0715842396020889,0.0532362163066864),(-0.102229714393616,-0.0918472409248352,0.0500270053744316),(0.0328243598341942,-0.0628630220890045,0.219847500324249),(-0.0929397568106651,-0.0598123446106911,0.212814390659332),(-0.140351414680481,-0.0651696026325226,0.281688511371613),(-0.0299176927655935,0.0646412074565887,0.345614969730377),(-0.210334226489067,-0.019161444157362,0.170468419790268),(-0.189835593104362,-0.0147899463772774,0.284663945436478),(-0.0706062465906143,-0.0353134833276272,0.219783633947372),(-0.196250692009926,-0.0419037826359272,0.286000579595566),(-0.189289301633835,0.015417193993926,0.167268991470337),(-0.165491297841072,0.119253136217594,0.309156060218811),(-0.188711583614349,-0.0422543436288834,0.0857931450009346),(-0.137549817562103,-0.0175594426691532,0.048555850982666),(-0.0439321398735046,0.0188035927712917,0.209587976336479),(-0.166142821311951,0.0438390895724297,0.269286632537842),(-0.100659042596817,0.0212050415575504,0.210695147514343),(-0.165524810552597,0.0681574642658234,0.275103896856308),(-0.131917878985405,-0.0432314537465572,0.0469778589904308),(-0.0393056124448776,-0.127956256270409,0.0805243328213692),(-0.0148295955732465,-0.134464859962463,0.078124076128006),(0.0156515818089247,-0.132012516260147,0.0775675550103188),(0.128680378198624,-0.0638554841279984,0.0486980155110359),(0.011726126074791,-0.12689021229744,0.138521879911423),(-0.104669205844402,-0.0973712056875229,0.0786209478974342),(-0.0722803771495819,-0.0994613841176033,0.0782437026500702),(-0.0900976955890656,0.0289249792695045,0.304527103900909),(-0.131665915250778,-0.0805337652564049,0.0729337483644485),(-0.17888680100441,0.0127522293478251,0.288278430700302),(-0.131906762719154,0.0216084867715836,0.211986422538757),(0.0438910871744156,0.0446652211248875,0.170035198330879),(0.126842275261879,-0.0620891898870468,0.0720244571566582),(-0.181458547711372,0.0720020085573196,0.30515855550766),(-0.105359517037868,0.0106867477297783,0.222205132246017),(-0.0755681917071342,-0.105624243617058,0.10775239020586),(-0.130771055817604,0.0436740666627884,0.171749204397202),(-0.133024662733078,0.049973726272583,0.138679206371307),(-0.11655567586422,-0.016352504491806,0.262825727462769),(-0.192813113331795,0.00962049700319767,0.228011801838875),(-0.0995994955301285,0.0463632792234421,0.169919461011887),(-0.0153328543528914,0.07756557315588,0.138280719518661),(-0.0149811441078782,0.0544508099555969,0.170514196157455),(-0.0777326822280884,0.0189591310918331,0.297642737627029),(-0.0429378487169743,0.0526389256119728,0.171193689107895),(-0.210668057203293,-0.0934961810708046,0.245899826288223),(-0.162400558590889,0.0198477655649185,0.223333954811096),(0.112556174397469,-0.0415905937552452,0.087884321808815),(-0.0984991043806076,0.0341813936829567,0.19681504368782),(-0.125417664647102,0.00907643139362335,0.292186677455902),(0.0127286352217197,0.0715995132923126,0.138794869184494),(-0.184464573860168,-0.063567191362381,0.0917578190565109),(-0.159845903515816,0.0349735803902149,0.277037382125854),(-0.163954228162766,-0.073273241519928,0.079649306833744),(-0.130220845341682,0.0479081235826015,0.111017473042011),(-0.105627626180649,-0.103251308202744,0.104907594621181),(-0.0447412990033627,-0.130966305732727,0.105820834636688),(-0.0145897325128317,-0.137667417526245,0.107010833919048),(0.0177259147167206,-0.133680522441864,0.11051332205534),(-0.20410780608654,-0.015498636290431,0.265768945217133),(-0.163662612438202,-0.0963144749403,0.108248025178909),(-0.133774682879448,-0.102946348488331,0.108776144683361),(-0.152653515338898,-0.093793697655201,0.0112244309857488),(-0.169374197721481,0.0769077241420746,0.31595915555954),(-0.15337011218071,0.0495448186993599,0.289855599403381),(-0.14865180850029,0.0935175195336342,0.306516766548157),(-0.163774311542511,-0.100279614329338,0.138708546757698),(-0.114786863327026,-0.0349755696952343,0.251059830188751),(0.0435214228928089,-0.123003117740154,0.107089169323444),(0.0122568001970649,0.0234032459557056,0.212896287441254),(-0.132915586233139,-0.105148307979107,0.138666361570358),(-0.103796437382698,-0.10418801009655,0.13867013156414),(-0.0721595510840416,-0.1059859842062,0.138681977987289),(0.0412953048944473,-0.0123581402003765,0.221496060490608),(-0.0697300583124161,0.0507166534662247,0.170578330755234),(0.0441036224365234,-0.114852353930473,0.138935402035713),(-0.0128488391637802,0.0388977639377117,0.196252673864365),(-0.124916173517704,-0.00659546442329884,0.306106418371201),(-0.218161851167679,-0.071009561419487,0.230814844369888),(-0.163197606801987,-0.0973011329770088,0.173606932163239),(-0.106259688735008,-0.0960564464330673,0.167294099926949),(-0.134439319372177,-0.0996981337666512,0.164969086647034),(-0.160570159554482,-0.110724151134491,0.202919006347656),(-0.120365753769875,-0.00549432123079896,0.253050655126572),(-0.133883744478226,0.0106024611741304,0.23326064646244),(-0.0365464128553867,0.062771737575531,0.351498425006866),(-0.0698662772774696,0.0357129909098148,0.305281817913055),(-0.135447904467583,-0.0874549821019173,0.184239640831947),(-0.112891294062138,0.00657996907830238,0.271908432245255),(-0.0499069318175316,0.0498133301734924,0.325594484806061),(-0.135738432407379,-0.100006818771362,-7.45058059692383E-09),(0.0123523958027363,-0.101531967520714,-7.45058059692383E-09),(-0.102930329740047,-0.0987276136875153,-7.45058059692383E-09),(-0.158383101224899,0.0353976972401142,0.167762398719788),(0.0585155189037323,-0.0887269079685211,0.0169257298111916),(-0.202236160635948,-0.0440891794860363,0.107780121266842),(0.12652799487114,-0.0424845181405544,0.0317913927137852),(0.0445115864276886,-0.111490845680237,0.0452388003468513),(0.0178857706487179,0.0359265469014645,0.199328750371933),(0.0685334727168083,-0.0978689268231392,0.0533365905284882),(0.138488471508026,-0.0432419404387474,0.0493728704750538),(0.0406565591692924,0.062880277633667,0.138536900281906),(0.0871811881661415,-0.0870387107133865,0.138694822788239),(-0.0505233928561211,0.0300182458013296,0.313426643610001),(0.0435324311256409,-0.119963906705379,0.0792121887207031),(0.0723142325878143,-0.100660108029842,0.0801471099257469),(0.0880676060914993,-0.086207315325737,0.078484445810318),(0.136276960372925,-0.0405644066631794,0.078633114695549),(0.0735301449894905,0.0462804175913334,0.10518267005682),(-0.180783584713936,0.120272636413574,0.33598318696022),(-0.155802026391029,-0.042164009064436,0.0622472763061523),(-0.192451253533363,-0.0732510983943939,0.112686090171337),(0.0313579067587852,0.0240139346569777,0.208784699440002),(0.0728883668780327,-0.103513494133949,0.107350297272205),(0.0885002017021179,-0.0885679498314857,0.105739302933216),(0.100790202617645,-0.0713259652256966,0.10683286935091),(0.109439946711063,-0.0426978133618832,0.107300646603107),(-0.18864569067955,-0.0167884975671768,0.0867345333099365),(-0.0709428116679192,0.0352016389369965,0.19365206360817),(-0.0357190407812595,0.0615072995424271,0.335724234580994),(0.0447911284863949,0.0144118629395962,-7.45058059692383E-09),(0.0369860865175724,0.0369828194379807,-7.45058059692383E-09),(0.0461129434406757,-0.0748821049928665,-7.45058059692383E-09),(0.104031659662724,-0.0135611081495881,0.0148804550990462),(0.0986066535115242,0.0066530667245388,0.0271508432924747),(0.103960558772087,-0.0420542061328888,0.0150693515315652),(0.121874935925007,-0.0147962821647525,0.0282622296363115),(0.0696230307221413,0.0340555869042873,0.168976783752441),(0.0729203075170517,0.015480482019484,0.0226278305053711),(-0.0445376336574554,0.0741409137845039,0.139188349246979),(0.046685803681612,0.0460076108574867,0.0192816369235516),(0.132462680339813,-0.0147683853283525,0.079218864440918),(0.123972199857235,0.00519884005188942,0.0471794344484806),(0.13483801484108,-0.0135693158954382,0.0477543026208878),(0.101557418704033,0.0150842368602753,0.0500984787940979),(-0.151446789503098,0.125798091292381,0.318272113800049),(0.0826703608036041,0.023927254602313,0.0464257299900055),(0.0693408101797104,0.0435765013098717,0.0500893704593182),(-0.0420871675014496,0.0380131863057613,0.193471923470497),(-0.0971032008528709,0.0616641864180565,-7.45058059692383E-09),(-0.0130963791161776,0.064698226749897,0.0197515171021223),(-0.157119512557983,0.00803167372941971,-7.45058059692383E-09),(0.113602519035339,-0.0132037419825792,0.0879008769989014),(-0.069912314414978,0.066078893840313,0.0191369466483593),(0.0389328189194202,0.0351467467844486,0.194373697042465),(0.0768988505005836,0.0420413166284561,0.0788332372903824),(0.10157422721386,0.0134498169645667,0.0773250162601471),(0.123080961406231,0.00395354814827442,0.0694246292114258),(-0.211960434913635,-0.102200835943222,0.224356546998024),(0.110181555151939,-0.0136255938559771,0.109196342527866),(-0.102282598614693,0.0414383597671986,0.019612405449152),(-0.172445297241211,0.11539913713932,0.340771019458771),(-0.181048646569252,0.112369157373905,0.34296378493309),(0.0725264996290207,-0.0152853392064571,0.200319215655327),(-0.183978870511055,0.0709394812583923,0.317676812410355),(-0.153028383851051,-0.0384657420217991,-7.45058059692383E-09),(-0.154637187719345,-0.0691222250461578,-7.45058059692383E-09),(-0.152765303850174,-0.0738510563969612,0.015262059867382),(-0.153248697519302,-0.0919284746050835,-7.45058059692383E-09),(-0.16192090511322,-0.0145302480086684,-7.45058059692383E-09),(-0.161076262593269,-0.0149271814152598,0.0173035766929388),(-0.139386385679245,-0.0480194091796875,0.0201432537287474),(-0.15407682955265,-0.0336258858442307,0.0154564278200269),(-0.141747921705246,-0.0158547051250935,0.0288874395191669),(-0.0563743449747562,-0.108996540307999,0.0737379342317581),(-0.0461691729724407,0.0890766233205795,0.110146202147007),(-0.0146415047347546,0.0512426868081093,-7.45058059692383E-09),(-0.156508177518845,0.00872325897216797,0.0127747664228082),(-0.0932494476437569,0.0622886717319489,0.0157215017825365),(-0.134241998195648,0.0180515833199024,0.0220324043184519),(-0.0754619538784027,0.0455531552433968,0.0509162880480289),(-0.103701874613762,0.0273517612367868,0.0517874732613564),(-0.131066977977753,0.0115249017253518,0.0524038933217525),(-0.062931016087532,0.0692232176661491,0.0536416172981262),(-0.132335588335991,0.0322872921824455,0.19751612842083),(-0.0452888980507851,0.0760203972458839,0.0472172982990742),(-0.163926124572754,0.0142420912161469,0.0823174566030502),(-0.174691706895828,-0.0135900285094976,0.0736509189009666),(-0.0486402213573456,0.0849898308515549,0.0788175389170647),(-0.0689510703086853,0.0702485665678978,0.0784279331564903),(-0.0810153111815453,0.0491584502160549,0.0748984813690186),(-0.0429749675095081,0.0617619827389717,-7.45058059692383E-09),(0.0349937379360199,0.00642204098403454,0.219141826033592),(-0.202323064208031,-0.0122631303966045,0.109208643436432),(-0.188646167516708,0.0148954978212714,0.108683586120605),(-0.0744052901864052,0.0735662579536438,0.106222227215767),(-0.161729156970978,0.0381991006433964,0.108166508376598),(-0.104008600115776,0.0453929454088211,-7.45058059692383E-09),(0.0388389863073826,0.0702219158411026,0.10972835123539),(-0.0412575826048851,0.0688836574554443,0.0204634200781584),(-0.132600158452988,0.0162683837115765,-7.45058059692383E-09),(0.0419384241104126,0.0643723532557487,0.0487342029809952),(-0.0230755694210529,0.0902970731258392,0.106796741485596),(0.0122685618698597,0.0503091886639595,-7.45058059692383E-09),(0.0420029424130917,0.0680971890687943,0.0789963230490685),(-0.0132175851613283,0.00625489093363285,0.222308561205864),(0.0146723045036197,0.00723757036030293,0.223271667957306),(0.0720149055123329,-0.0120490025728941,0.00231547281146049),(0.013688700273633,0.0642379224300385,0.0262222941964865),(0.033619936555624,0.0599825419485569,0.0301631242036819),(0.0156846102327108,0.0726122707128525,0.0497567467391491),(-0.0139973452314734,0.0766579210758209,0.0474896989762783),(-0.0166601836681366,0.0857705846428871,0.0790435597300529),(0.0127416122704744,0.0787845030426979,0.0776184424757957),(-0.137325063347816,0.0222998633980751,0.0709470063447952),(-0.103061355650425,0.0392319709062576,0.082869827747345),(-0.133015736937523,0.0387391112744808,0.0904415026307106),(-0.151931047439575,0.0321191623806953,0.0878717452287674),(0.0125869233161211,0.0806632563471794,0.105742789804935),(-0.0995742082595825,0.049370177090168,0.106232292950153),(-0.0746603757143021,0.0656085163354874,-7.45058059692383E-09),(0.0122953318059444,0.017735980451107,-7.45058059692383E-09),(-0.0146934473887086,0.0262711010873318,-7.45058059692383E-09),(-0.0429374538362026,0.0298651698976755,-7.45058059692383E-09),(-0.103215932846069,0.0137835666537285,-7.45058059692383E-09),(0.0444422401487827,-0.0129836350679398,-7.45058059692383E-09),(-0.0746518895030022,0.0316607765853405,-7.45058059692383E-09),(0.0123018361628056,-0.0127876792103052,-7.45058059692383E-09),(-0.0147215090692043,-0.0133242877200246,-7.45058059692383E-09),(-0.101430043578148,-0.0147481001913548,-7.45058059692383E-09),(-0.0429213680326939,-0.0151002155616879,-7.45058059692383E-09),(-0.132630944252014,-0.0134387537837029,-7.45058059692383E-09),(-0.0746475011110306,-0.0111579261720181,-7.45058059692383E-09),(0.0461949594318867,-0.0483818538486958,-7.45058059692383E-09),(0.0123028568923473,-0.0431565642356873,-7.45058059692383E-09),(0.0676943361759186,-0.0439984127879143,0.00213921279646456),(-0.0147214606404305,-0.0419304519891739,-7.45058059692383E-09),(-0.0429213680326939,-0.0426230616867542,-7.45058059692383E-09),(-0.134391859173775,-0.0420995727181435,-7.45058059692383E-09),(0.0123003236949444,-0.0714240521192551,-7.45058059692383E-09),(-0.0147217661142349,-0.0719940662384033,-7.45058059692383E-09),(-0.0746477097272873,-0.0698381289839745,-7.45058059692383E-09),(-0.0429213680326939,-0.0721928924322128,-7.45058059692383E-09),(-0.101144231855869,-0.0718697011470795,-7.45058059692383E-09),(0.0347950644791126,-0.096686989068985,-7.45058059692383E-09),(-0.132067084312439,-0.0720017328858376,-7.45058059692383E-09),(-0.159548789262772,-0.0125050684437156,0.0618688985705376),(-0.0169071108102798,-0.107485927641392,-7.45058059692383E-09),(-0.0746394321322441,-0.103576719760895,-7.45058059692383E-09),(-0.0428757518529892,-0.105996340513229,-7.45058059692383E-09),(-0.0746474862098694,-0.0418127365410328,-7.45058059692383E-09),(-0.101288944482803,-0.0456511229276657,-7.45058059692383E-09),(0.061871238052845,0.0245271548628807,0.191577181220055),(-0.0470216795802116,0.0414715930819511,0.344332307577133),(-0.0351001992821693,0.0582603961229324,0.352131396532059),(-0.043320570141077,0.0422725304961205,0.325726985931396),(-0.0332878455519676,0.056865319609642,0.334871053695679),(-0.0782285928726196,0.010980136692524,0.334277510643005),(-0.0612197890877724,0.0185103937983513,0.30783212184906),(-0.0876919776201248,0.0268637835979462,0.333815038204193),(-0.0750949084758759,-0.00158989988267422,0.21651217341423),(-0.0432584583759308,0.000724630663171411,0.217384174466133))); -#925=IFCPOLYGONALFACESET(#924,.F.,(#211,#212,#213,#214,#215,#216,#217,#218,#219,#220,#221,#222,#223,#224,#225,#226,#227,#228,#229,#230,#231,#232,#233,#234,#235,#236,#237,#238,#239,#240,#241,#242,#243,#244,#245,#246,#247,#248,#249,#250,#251,#252,#253,#254,#255,#256,#257,#258,#259,#260,#261,#262,#263,#264,#265,#266,#267,#268,#269,#270,#271,#272,#273,#274,#275,#276,#277,#278,#279,#280,#281,#282,#283,#284,#285,#286,#287,#288,#289,#290,#291,#292,#293,#294,#295,#296,#297,#298,#299,#300,#301,#302,#303,#304,#305,#306,#307,#308,#309,#310,#311,#312,#313,#314,#315,#316,#317,#318,#319,#320,#321,#322,#323,#324,#325,#326,#327,#328,#329,#330,#331,#332,#333,#334,#335,#336,#337,#338,#339,#340,#341,#342,#343,#344,#345,#346,#347,#348,#349,#350,#351,#352,#353,#354,#355,#356,#357,#358,#359,#360,#361,#362,#363,#364,#365,#366,#367,#368,#369,#370,#371,#372,#373,#374,#375,#376,#377,#378,#379,#380,#381,#382,#383,#384,#385,#386,#387,#388,#389,#390,#391,#392,#393,#394,#395,#396,#397,#398,#399,#400,#401,#402,#403,#404,#405,#406,#407,#408,#409,#410,#411,#412,#413,#414,#415,#416,#417,#418,#419,#420,#421,#422,#423,#424,#425,#426,#427,#428,#429,#430,#431,#432,#433,#434,#435,#436,#437,#438,#439,#440,#441,#442,#443,#444,#445,#446,#447,#448,#449,#450,#451,#452,#453,#454,#455,#456,#457,#458,#459,#460,#461,#462,#463,#464,#465,#466,#467,#468,#469,#470,#471,#472,#473,#474,#475,#476,#477,#478,#479,#480,#481,#482,#483,#484,#485,#486,#487,#488,#489,#490,#491,#492,#493,#494,#495,#496,#497,#498,#499,#500,#501,#502,#503,#504,#505,#506,#507,#508,#509,#510,#511,#512,#513,#514,#515,#516,#517,#518,#519,#520,#521,#522,#523,#524,#525,#526,#527,#528,#529,#530,#531,#532,#533,#534,#535,#536,#537,#538,#539,#540,#541,#542,#543,#544,#545,#546,#547,#548,#549,#550,#551,#552,#553,#554,#555,#556,#557,#558,#559,#560,#561,#562,#563,#564,#565,#566,#567,#568,#569,#570,#571,#572,#573,#574,#575,#576,#577,#578,#579,#580,#581,#582,#583,#584,#585,#586,#587,#588,#589,#590,#591,#592,#593,#594,#595,#596,#597,#598,#599,#600,#601,#602,#603,#604,#605,#606,#607,#608,#609,#610,#611,#612,#613,#614,#615,#616,#617,#618,#619,#620,#621,#622,#623,#624,#625,#626,#627,#628,#629,#630,#631,#632,#633,#634,#635,#636,#637,#638,#639,#640,#641,#642,#643,#644,#645,#646,#647,#648,#649,#650,#651,#652,#653,#654,#655,#656,#657,#658,#659,#660,#661,#662,#663,#664,#665,#666,#667,#668,#669,#670,#671,#672,#673,#674,#675,#676,#677,#678,#679,#680,#681,#682,#683,#684,#685,#686,#687,#688,#689,#690,#691,#692,#693,#694,#695,#696,#697,#698,#699,#700,#701,#702,#703,#704,#705,#706,#707,#708,#709,#710,#711,#712,#713,#714,#715,#716,#717,#718,#719,#720,#721,#722,#723,#724,#725,#726,#727,#728,#729,#730,#731,#732,#733,#734,#735,#736,#737,#738,#739,#740,#741,#742,#743,#744,#745,#746,#747,#748,#749,#750,#751,#752,#753,#754,#755,#756,#757,#758,#759,#760,#761,#762,#763,#764,#765,#766,#767,#768,#769,#770,#771,#772,#773,#774,#775,#776,#777,#778,#779,#780,#781,#782,#783,#784,#785,#786,#787,#788,#789,#790,#791,#792,#793,#794,#795,#796,#797,#798,#799,#800,#801,#802,#803,#804,#805,#806,#807,#808,#809,#810,#811,#812,#813,#814,#815,#816,#817,#818,#819,#820,#821,#822,#823,#824,#825,#826,#827,#828,#829,#830,#831,#832,#833,#834,#835,#836,#837,#838,#839,#840,#841,#842,#843,#844,#845,#846,#847,#848,#849,#850,#851,#852,#853,#854,#855,#856,#857,#858,#859,#860,#861,#862,#863,#864,#865,#866,#867,#868,#869,#870,#871,#872,#873,#874,#875,#876,#877,#878,#879,#880,#881,#882,#883,#884,#885,#886,#887,#888,#889,#890,#891,#892,#893,#894,#895,#896,#897,#898,#899,#900,#901,#902,#903,#904,#905,#906,#907,#908,#909,#910,#911,#912,#913,#914,#915,#916,#917,#918,#919,#920,#921,#922,#923),$); -#926=IFCSHAPEREPRESENTATION(#17,'Body','Tessellation',(#925)); -#927=IFCCARTESIANPOINT((0.,0.,0.)); -#928=IFCDIRECTION((1.,0.,0.)); -#929=IFCDIRECTION((0.,0.,1.)); -#930=IFCAXIS2PLACEMENT3D(#927,#929,#928); -#931=IFCREPRESENTATIONMAP(#930,#926); -#932=IFCCARTESIANPOINTLIST2D(((-0.161386370658875,0.000390071421861649),(-0.16297847032547,0.0306398719549179),(-0.152914509177208,0.0576198659837246),(-0.148716494441032,0.0795774236321449),(-0.149392008781433,0.102066904306412),(-0.15144681930542,0.125798091292381),(-0.157580137252808,0.132616892457008),(-0.169090509414673,0.130419373512268),(-0.180844187736511,0.118465758860111),(-0.182052731513977,0.0906300097703934),(-0.183831930160522,0.0552833341062069),(-0.183684945106506,0.0396271869540215),(-0.192724362015724,-0.00467484071850777))); -#933=IFCINDEXEDPOLYCURVE(#932,$,$); -#934=IFCCARTESIANPOINTLIST2D(((-0.173348978161812,0.0203548446297646),(-0.16315957903862,0.0617493018507957),(-0.157428041100502,0.0974122136831284),(-0.165070101618767,0.119064696133137))); -#935=IFCINDEXEDPOLYCURVE(#934,$,$); -#936=IFCCARTESIANPOINTLIST2D(((-0.160456106066704,0.03740194439888),(-0.130220890045166,0.0479081235826015),(-0.0977480411529541,0.0540151223540306),(-0.074405312538147,0.0735662579536438),(-0.0373027324676514,0.0895451977849007),(-0.00524431467056274,0.0854801684617996),(0.0449999570846558,0.0689153224229813),(0.0768988728523254,0.0420413166284561),(0.100000023841858,0.0200000032782555),(0.112531423568726,-0.0134119689464569),(0.11093932390213,-0.0415389761328697),(0.101917445659637,-0.0744422599673271),(0.128680348396301,-0.0638554915785789),(0.138488471508026,-0.0432419404387474),(0.134837985038757,-0.0135693177580833),(0.123972177505493,0.00519884377717972),(0.100000023841858,0.0200000032782555))); -#937=IFCINDEXEDPOLYCURVE(#936,$,$); -#938=IFCCARTESIANPOINTLIST2D(((-0.0413289070129395,0.0605994611978531),(-0.0554808378219604,0.0468897596001625),(-0.0780355930328369,0.0367180481553078),(-0.0992635488510132,0.0185858532786369),(-0.136412382125854,0.00443390011787415))); -#939=IFCINDEXEDPOLYCURVE(#938,$,$); -#940=IFCCARTESIANPOINTLIST2D(((-0.14391028881073,0.00847188383340836),(-0.127020835876465,0.0233357548713684),(-0.0995742082595825,0.049370177090168),(-0.0685850381851196,0.0688069462776184),(-0.0296431183815002,0.0763391554355621),(-0.0267347097396851,0.07121342420578),(-0.0338107347488403,0.0583882182836533),(-0.0585765838623047,0.0190281048417091),(-0.103685975074768,-0.00794906169176102),(-0.130663156509399,-0.0145827829837799))); -#941=IFCINDEXEDPOLYCURVE(#940,$,$); -#942=IFCCARTESIANPOINTLIST2D(((0.101917445659637,-0.0744422599673271),(0.0776327848434448,-0.0989715680480003),(0.0435214042663574,-0.123003117740154),(-0.00187504291534424,-0.136098772287369),(-0.0447412729263306,-0.130966305732727),(-0.0755681991577148,-0.105624251067638),(-0.114447318017483,-0.103237792849541),(-0.148344993591309,-0.102713964879513),(-0.129387378692627,-0.0837726220488548),(-0.112089991569519,-0.0523208752274513))); -#943=IFCINDEXEDPOLYCURVE(#942,$,$); -#944=IFCCARTESIANPOINTLIST2D(((-0.148344993591309,-0.102713964879513),(-0.16057014465332,-0.11072414368391),(-0.187541648745537,-0.117346309125423),(-0.205768346786499,-0.106695257127285),(-0.214284062385559,-0.0905132815241814),(-0.222012758255005,-0.0435851588845253),(-0.217635273933411,-0.0236888602375984),(-0.189349979162216,0.0118629187345505))); -#945=IFCINDEXEDPOLYCURVE(#944,$,$); -#946=IFCGEOMETRICCURVESET((#933,#935,#937,#939,#941,#943,#945)); -#947=IFCSHAPEREPRESENTATION(#18,'Body','Annotation2D',(#946)); -#948=IFCCARTESIANPOINT((0.,0.,0.)); -#949=IFCDIRECTION((1.,0.,0.)); -#950=IFCDIRECTION((0.,0.,1.)); -#951=IFCAXIS2PLACEMENT3D(#948,#950,#949); -#952=IFCREPRESENTATIONMAP(#951,#947); -#953=IFCTYPEPRODUCT('0UrP0fLdD5OwzwD41aRKao',$,'SETOUT-POINT',$,'IfcAnnotation/SYMBOL',(#954),$,$); -#954=IFCPROPERTYSET('27lmSbeAXC08EWkEq8XdUG',$,'EPset_Annotation',$,(#955)); -#955=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('setout-point'),$); -#956=IFCTYPEPRODUCT('3IQrQOSFP0WfkuLk0ak7_0',$,'CONTROL-POINT',$,'IfcAnnotation/SYMBOL',(#957),$,$); -#957=IFCPROPERTYSET('23aN9DsdjFcfWq8KGSIVoN',$,'EPset_Annotation',$,(#958)); -#958=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('control-point'),$); -#959=IFCTYPEPRODUCT('3wvbaiaIz8agQgDRzt01vz',$,'TRAVERSE-POINT',$,'IfcAnnotation/SYMBOL',(#960),$,$); -#960=IFCPROPERTYSET('1j7aFM1Rb9BRuKgUEn1U10',$,'EPset_Annotation',$,(#961)); -#961=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('traverse-point'),$); -#962=IFCTYPEPRODUCT('0p5ZTfTnX9ZOywroa7Ffql',$,'DASHED',$,'IfcAnnotation/LINEWORK',(#963),$,$); -#963=IFCPROPERTYSET('27smSHyiv39vhBRSwfDVCD',$,'EPset_Annotation',$,(#964)); -#964=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('dashed'),$); -#965=IFCTYPEPRODUCT('2EvrG9Vuf6t9etgMeWFuJ2',$,'FINE',$,'IfcAnnotation/LINEWORK',(#966),$,$); -#966=IFCPROPERTYSET('0gVTuDcZ5ByRdR3sZnEZUR',$,'EPset_Annotation',$,(#967)); -#967=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('fine'),$); -#968=IFCTYPEPRODUCT('0IeM1ywXn1qhR_6NhB6N4s',$,'THIN',$,'IfcAnnotation/LINEWORK',(#969),$,$); -#969=IFCPROPERTYSET('0t6c$uCeT9092GYkbm8hDS',$,'EPset_Annotation',$,(#970)); -#970=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('thin'),$); -#971=IFCTYPEPRODUCT('1jZVbCwrTCGhZdKbH4uqTP',$,'MEDIUM',$,'IfcAnnotation/LINEWORK',(#972),$,$); -#972=IFCPROPERTYSET('2uTJ11lF98GeN8pPIf340N',$,'EPset_Annotation',$,(#973)); -#973=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('medium'),$); -#974=IFCTYPEPRODUCT('38zW9E1uH2ae$zat9KrieS',$,'THICK',$,'IfcAnnotation/LINEWORK',(#975),$,$); -#975=IFCPROPERTYSET('2XQxgO16v9vxjvuIJpaPpG',$,'EPset_Annotation',$,(#976)); -#976=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('thick'),$); -#977=IFCTYPEPRODUCT('3G2s7ZLzfDJh5J$2iIzHw9',$,'STRONG',$,'IfcAnnotation/LINEWORK',(#978),$,$); -#978=IFCPROPERTYSET('0TcB8Gal96vebTrLWa5CEw',$,'EPset_Annotation',$,(#979)); -#979=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('strong'),$); -#980=IFCTYPEPRODUCT('3pq2B$0k52ZOv2bFuRYkxO',$,'SETOUT-TAG',$,'IfcAnnotation/TEXT',(#981),(#1000),$); -#981=IFCPROPERTYSET('39$oNFI052cBhtpZCVVLfj',$,'EPset_Annotation',$,(#982)); -#982=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('setout-tag'),$); -#983=IFCCARTESIANPOINT((0.,0.,0.)); -#984=IFCDIRECTION((0.,0.,1.)); -#985=IFCDIRECTION((1.,0.,0.)); -#986=IFCAXIS2PLACEMENT3D(#983,#984,#985); -#987=IFCPLANAREXTENT(1000.,1000.); -#988=IFCTEXTLITERALWITHEXTENT('E ``round({{easting}}, 0.001)``',#986,.RIGHT.,#987,'center'); -#989=IFCCARTESIANPOINT((0.,0.,0.)); -#990=IFCDIRECTION((0.,0.,1.)); -#991=IFCDIRECTION((1.,0.,0.)); -#992=IFCAXIS2PLACEMENT3D(#989,#990,#991); -#993=IFCPLANAREXTENT(1000.,1000.); -#994=IFCTEXTLITERALWITHEXTENT('N ``round({{northing}}, 0.001)``',#992,.RIGHT.,#993,'center'); -#995=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#988,#994)); -#996=IFCCARTESIANPOINT((0.,0.,0.)); -#997=IFCDIRECTION((1.,0.,0.)); -#998=IFCDIRECTION((0.,0.,1.)); -#999=IFCAXIS2PLACEMENT3D(#996,#998,#997); -#1000=IFCREPRESENTATIONMAP(#999,#995); -#1001=IFCTYPEPRODUCT('11M3ahhrr9NBdB29YEazzw',$,'DOOR-TAG',$,'IfcAnnotation/TEXT',(#1002),(#1021),$); -#1002=IFCPROPERTYSET('3xUNoLKPT9kB4LMdoctm5k',$,'EPset_Annotation',$,(#1003)); -#1003=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('door-tag'),$); -#1004=IFCCARTESIANPOINT((0.,0.,0.)); -#1005=IFCDIRECTION((0.,0.,1.)); -#1006=IFCDIRECTION((1.,0.,0.)); -#1007=IFCAXIS2PLACEMENT3D(#1004,#1005,#1006); -#1008=IFCPLANAREXTENT(1000.,1000.); -#1009=IFCTEXTLITERALWITHEXTENT('{{type.Name}}',#1007,.RIGHT.,#1008,'center'); -#1010=IFCCARTESIANPOINT((0.,0.,0.)); -#1011=IFCDIRECTION((0.,0.,1.)); -#1012=IFCDIRECTION((1.,0.,0.)); -#1013=IFCAXIS2PLACEMENT3D(#1010,#1011,#1012); -#1014=IFCPLANAREXTENT(1000.,1000.); -#1015=IFCTEXTLITERALWITHEXTENT('{{Name}}',#1013,.RIGHT.,#1014,'center'); -#1016=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1009,#1015)); -#1017=IFCCARTESIANPOINT((0.,0.,0.)); -#1018=IFCDIRECTION((1.,0.,0.)); -#1019=IFCDIRECTION((0.,0.,1.)); -#1020=IFCAXIS2PLACEMENT3D(#1017,#1019,#1018); -#1021=IFCREPRESENTATIONMAP(#1020,#1016); -#1022=IFCTYPEPRODUCT('1eE8Y$BVDFDgG8Fj6d9wiV',$,'WINDOW-TAG',$,'IfcAnnotation/TEXT',(#1023),(#1036),$); -#1023=IFCPROPERTYSET('2MqzSGkXDBcPSolaAQvYO4',$,'EPset_Annotation',$,(#1024)); -#1024=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('window-tag'),$); -#1025=IFCCARTESIANPOINT((0.,0.,0.)); -#1026=IFCDIRECTION((0.,0.,1.)); -#1027=IFCDIRECTION((1.,0.,0.)); -#1028=IFCAXIS2PLACEMENT3D(#1025,#1026,#1027); -#1029=IFCPLANAREXTENT(1000.,1000.); -#1030=IFCTEXTLITERALWITHEXTENT('{{Name}}',#1028,.RIGHT.,#1029,'center'); -#1031=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1030)); -#1032=IFCCARTESIANPOINT((0.,0.,0.)); -#1033=IFCDIRECTION((1.,0.,0.)); -#1034=IFCDIRECTION((0.,0.,1.)); -#1035=IFCAXIS2PLACEMENT3D(#1032,#1034,#1033); -#1036=IFCREPRESENTATIONMAP(#1035,#1031); -#1037=IFCTYPEPRODUCT('0vvfHSiaPBxewA$32C4LdW',$,'SPACE-TAG',$,'IfcAnnotation/TEXT',(#1038),(#1063),$); -#1038=IFCPROPERTYSET('2zKuFdTPj3DhNdQ0U2kd5u',$,'EPset_Annotation',$,(#1039)); -#1039=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('space-tag'),$); -#1040=IFCCARTESIANPOINT((0.,0.,0.)); -#1041=IFCDIRECTION((0.,0.,1.)); -#1042=IFCDIRECTION((1.,0.,0.)); -#1043=IFCAXIS2PLACEMENT3D(#1040,#1041,#1042); -#1044=IFCPLANAREXTENT(1000.,1000.); -#1045=IFCTEXTLITERALWITHEXTENT('{{Name}}',#1043,.RIGHT.,#1044,'center'); -#1046=IFCCARTESIANPOINT((0.,0.,0.)); -#1047=IFCDIRECTION((0.,0.,1.)); -#1048=IFCDIRECTION((1.,0.,0.)); -#1049=IFCAXIS2PLACEMENT3D(#1046,#1047,#1048); -#1050=IFCPLANAREXTENT(1000.,1000.); -#1051=IFCTEXTLITERALWITHEXTENT('{{Description}}',#1049,.RIGHT.,#1050,'center'); -#1052=IFCCARTESIANPOINT((0.,0.,0.)); -#1053=IFCDIRECTION((0.,0.,1.)); -#1054=IFCDIRECTION((1.,0.,0.)); -#1055=IFCAXIS2PLACEMENT3D(#1052,#1053,#1054); -#1056=IFCPLANAREXTENT(1000.,1000.); -#1057=IFCTEXTLITERALWITHEXTENT('``round({{Qto_SpaceBaseQuantities.NetFloorArea}}, 0.01)``',#1055,.RIGHT.,#1056,'center'); -#1058=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1045,#1051,#1057)); -#1059=IFCCARTESIANPOINT((0.,0.,0.)); -#1060=IFCDIRECTION((1.,0.,0.)); -#1061=IFCDIRECTION((0.,0.,1.)); -#1062=IFCAXIS2PLACEMENT3D(#1059,#1061,#1060); -#1063=IFCREPRESENTATIONMAP(#1062,#1058); -#1064=IFCTYPEPRODUCT('36lTcd9yT8UBNDejQUNWrq',$,'MATERIAL-TAG',$,'IfcAnnotation/TEXT',(#1065),(#1078),$); -#1065=IFCPROPERTYSET('1x86VNVk1Drwe5XOj$GZX3',$,'EPset_Annotation',$,(#1066)); -#1066=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('rectangle-tag'),$); -#1067=IFCCARTESIANPOINT((0.,0.,0.)); -#1068=IFCDIRECTION((0.,0.,1.)); -#1069=IFCDIRECTION((1.,0.,0.)); -#1070=IFCAXIS2PLACEMENT3D(#1067,#1068,#1069); -#1071=IFCPLANAREXTENT(1000.,1000.); -#1072=IFCTEXTLITERALWITHEXTENT('{{material.Name}}',#1070,.RIGHT.,#1071,'center'); -#1073=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1072)); -#1074=IFCCARTESIANPOINT((0.,0.,0.)); -#1075=IFCDIRECTION((1.,0.,0.)); -#1076=IFCDIRECTION((0.,0.,1.)); -#1077=IFCAXIS2PLACEMENT3D(#1074,#1076,#1075); -#1078=IFCREPRESENTATIONMAP(#1077,#1073); -#1079=IFCTYPEPRODUCT('1rxhEX6I16oPqglXaGZ7Sw',$,'TYPE-TAG',$,'IfcAnnotation/TEXT',(#1080),(#1093),$); -#1080=IFCPROPERTYSET('3BeqEbDzX0xORamqqSx_kZ',$,'EPset_Annotation',$,(#1081)); -#1081=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('capsule-tag'),$); -#1082=IFCCARTESIANPOINT((0.,0.,0.)); -#1083=IFCDIRECTION((0.,0.,1.)); -#1084=IFCDIRECTION((1.,0.,0.)); -#1085=IFCAXIS2PLACEMENT3D(#1082,#1083,#1084); -#1086=IFCPLANAREXTENT(1000.,1000.); -#1087=IFCTEXTLITERALWITHEXTENT('{{type.Name}}',#1085,.RIGHT.,#1086,'center'); -#1088=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1087)); -#1089=IFCCARTESIANPOINT((0.,0.,0.)); -#1090=IFCDIRECTION((1.,0.,0.)); -#1091=IFCDIRECTION((0.,0.,1.)); -#1092=IFCAXIS2PLACEMENT3D(#1089,#1091,#1090); -#1093=IFCREPRESENTATIONMAP(#1092,#1088); -#1094=IFCTYPEPRODUCT('0sws1hxNb2Og1etXqyoEh1',$,'NAME-TAG',$,'IfcAnnotation/TEXT',(#1095),(#1108),$); -#1095=IFCPROPERTYSET('11L$PtdnX8LfYigzRZ$g0a',$,'EPset_Annotation',$,(#1096)); -#1096=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('capsule-tag'),$); -#1097=IFCCARTESIANPOINT((0.,0.,0.)); -#1098=IFCDIRECTION((0.,0.,1.)); -#1099=IFCDIRECTION((1.,0.,0.)); -#1100=IFCAXIS2PLACEMENT3D(#1097,#1098,#1099); -#1101=IFCPLANAREXTENT(1000.,1000.); -#1102=IFCTEXTLITERALWITHEXTENT('{{Name}}',#1100,.RIGHT.,#1101,'center'); -#1103=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1102)); -#1104=IFCCARTESIANPOINT((0.,0.,0.)); -#1105=IFCDIRECTION((1.,0.,0.)); -#1106=IFCDIRECTION((0.,0.,1.)); -#1107=IFCAXIS2PLACEMENT3D(#1104,#1106,#1105); -#1108=IFCREPRESENTATIONMAP(#1107,#1103); -ENDSEC; -END-ISO-10303-21; diff --git a/src/bonsai/bonsai/bim/data/templates/projects/IFC4 Demo Template.ifc b/src/bonsai/bonsai/bim/data/templates/projects/IFC4 Demo Template.ifc new file mode 120000 index 0000000000..265cfd34f3 --- /dev/null +++ b/src/bonsai/bonsai/bim/data/templates/projects/IFC4 Demo Template.ifc @@ -0,0 +1 @@ +../../libraries/IFC4 Demo Library.ifc \ No newline at end of file diff --git a/src/bonsai/bonsai/bim/data/templates/projects/IFC4X3 Demo Template.ifc b/src/bonsai/bonsai/bim/data/templates/projects/IFC4X3 Demo Template.ifc new file mode 120000 index 0000000000..5242f4c992 --- /dev/null +++ b/src/bonsai/bonsai/bim/data/templates/projects/IFC4X3 Demo Template.ifc @@ -0,0 +1 @@ +../../libraries/IFC4X3 Demo Library.ifc \ No newline at end of file diff --git a/src/bonsai/bonsai/bim/data/templates/titleblocks/README.md b/src/bonsai/bonsai/bim/data/templates/titleblocks/README.md new file mode 100644 index 0000000000..e2e2ebeb35 --- /dev/null +++ b/src/bonsai/bonsai/bim/data/templates/titleblocks/README.md @@ -0,0 +1 @@ +SVG [mustache](https://mustache.github.io/) templates that will be used for sheets and fill be filled with infromation from the sheet's IfcDocumentInformation attributes (e.g. Identification, Name, Revision, etc). diff --git a/src/bonsai/bonsai/bim/data/webui/templates/costing.html b/src/bonsai/bonsai/bim/data/webui/templates/costing.html index 0351bd978c..6e076203c3 100644 --- a/src/bonsai/bonsai/bim/data/webui/templates/costing.html +++ b/src/bonsai/bonsai/bim/data/webui/templates/costing.html @@ -21,7 +21,7 @@ /> - + + + + + + + + \ No newline at end of file diff --git a/src/pyodide/demo-app/wheels b/src/pyodide/demo-app/wheels index 6b5bfb4bdc..d1126cec5b 160000 --- a/src/pyodide/demo-app/wheels +++ b/src/pyodide/demo-app/wheels @@ -1 +1 @@ -Subproject commit 6b5bfb4bdc364f859643a624bd69bf9f471d45c0 +Subproject commit d1126cec5b6deec97575e7f66fcb429eb7db605c diff --git a/src/qtviewer/CMakeLists.txt b/src/qtviewer/CMakeLists.txt index 0e83f1a386..978d5f116b 100644 --- a/src/qtviewer/CMakeLists.txt +++ b/src/qtviewer/CMakeLists.txt @@ -86,14 +86,14 @@ target_link_libraries(${targetName} ${IFCOPENSHELL_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${OPENSCENEGRAPH_LIBRARIES} - Qt${QT_VERSION}::Core - Qt${QT_VERSION}::Gui - Qt${QT_VERSION}::OpenGL - Qt${QT_VERSION}::OpenGLWidgets + Qt${QT_VERSION}::Core + Qt${QT_VERSION}::Gui + Qt${QT_VERSION}::OpenGL + Qt${QT_VERSION}::OpenGLWidgets Qt${QT_VERSION}::Widgets ) -target_include_directories(${targetName} PUBLIC +target_include_directories(${targetName} PUBLIC ${QT_DIR}/include ${OPENSCENEGRAPH_INCLUDE_DIRS} ) diff --git a/src/serializers/GltfSerializer.cpp b/src/serializers/GltfSerializer.cpp index 8b1c0ec03b..b8487a5fb7 100644 --- a/src/serializers/GltfSerializer.cpp +++ b/src/serializers/GltfSerializer.cpp @@ -106,7 +106,10 @@ int GltfSerializer::writeMaterial(const ifcopenshell::geometry::taxonomy::style: base[3] = 1. - style->transparency; } - json_["materials"].push_back({ {"name", style->name}, {"doubleSided", true}, {"pbrMetallicRoughness", {{"baseColorFactor", base}, {"metallicFactor", 0}}}}); + if (style->has_specularity()) + json_["materials"].push_back({ {"name", style->name}, {"doubleSided", true}, {"pbrMetallicRoughness", {{"baseColorFactor", base}, {"metallicFactor", 0}, {"roughnessFactor", 1.0 / style->specularity}}}}); + else + json_["materials"].push_back({ {"name", style->name}, {"doubleSided", true}, {"pbrMetallicRoughness", {{"baseColorFactor", base}, {"metallicFactor", 0}}}}); if (style->transparency == style->transparency && style->transparency > 1.e-9) { json_["materials"].back()["alphaMode"] = "BLEND"; diff --git a/src/serializers/HdfSerializer.cpp b/src/serializers/HdfSerializer.cpp index 50b9be6e62..2fceb0eec0 100644 --- a/src/serializers/HdfSerializer.cpp +++ b/src/serializers/HdfSerializer.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #ifdef USE_BINARY #define write_shape write_binary @@ -233,21 +234,25 @@ namespace { } } -void HdfSerializer::read_surface_style(surface_style_serialization& s, const ifcopenshell::geometry::taxonomy::style::ptr& gss_) { - auto& gss = *gss_; +void HdfSerializer::read_surface_style(const surface_style_serialization& s, + ifcopenshell::geometry::taxonomy::style& gss, + IfcParse::IfcFile& f) { if (strlen(s.name) || s.id) { - if (s.diffuse[0] == s.diffuse[0]) { + if (!std::isnan(s.diffuse[0])) { gss.diffuse = ifcopenshell::geometry::taxonomy::colour(s.diffuse[0], s.diffuse[1], s.diffuse[2]); } - if (s.specular[0] == s.specular[0]) { + if (!std::isnan(s.specular[0])) { gss.specular = ifcopenshell::geometry::taxonomy::colour(s.specular[0], s.specular[1], s.specular[2]); } - if (s.transparency == s.transparency) { + if (!std::isnan(s.transparency)) { gss.transparency = s.transparency; } - if (s.specularity == s.specularity) { + if (!std::isnan(s.specularity)) { gss.specularity = s.specularity; } + if (s.id != 0) { + gss.instance = f.instance_by_id(s.id)->as(); + } } } @@ -356,7 +361,7 @@ IfcGeom::Element* HdfSerializer::read(IfcParse::IfcFile& f, const std::string& g matrix->components() << Eigen::Map(&part.matrix[0][0]); auto style_ptr = ifcopenshell::geometry::taxonomy::make(); - read_surface_style(part.surface_style, style_ptr); + read_surface_style(part.surface_style, *style_ptr, f); shapes.push_back(IfcGeom::ConversionResult(part.id, matrix, new ifcopenshell::geometry::OpenCascadeShape(shp), style_ptr)); } @@ -421,7 +426,8 @@ IfcGeom::Element* HdfSerializer::read(IfcParse::IfcFile& f, const std::string& g std::vector surface_style_ptrs(surface_styles.size()); for (size_t i = 0; i < surface_styles.size(); ++i) { - read_surface_style(surface_styles[i], surface_style_ptrs[i]); + surface_style_ptrs[i] = ifcopenshell::geometry::taxonomy::make(); + read_surface_style(surface_styles[i], *surface_style_ptrs[i], f); } triangulation_geometry = boost::shared_ptr(new IfcGeom::Representation::Triangulation( @@ -544,7 +550,8 @@ void HdfSerializer::write_style(surface_style_serialization& data, const ifcopen data.name = s.name.c_str(); // @todo data.original_name = s.name.c_str(); - data.id = s.instance->as()->id(); + auto instance = s.instance->as(); + data.id = instance ? instance->id() : 0; if (s.diffuse) { data.diffuse[0] = s.diffuse.ccomponents()(0); data.diffuse[1] = s.diffuse.ccomponents()(1); @@ -565,6 +572,16 @@ void HdfSerializer::write_style(surface_style_serialization& data, const ifcopen void HdfSerializer::write(const IfcGeom::BRepElement* o) { + // Currenly we only support OpenCascade shapes. + for (auto it = o->geometry().begin(); it != o->geometry().end(); ++it) { + auto shape_ptr = std::dynamic_pointer_cast(it->Shape()); + if (shape_ptr == nullptr) { + std::cerr << "WARNING. Only OpenCascade shapes support caching. " + << "Skipping caching for item #" << it->ItemId() << "." << std::endl; + return; + } + } + static auto nan = std::numeric_limits::quiet_NaN(); auto element_group = write((const IfcGeom::Element*)o); @@ -609,6 +626,7 @@ void HdfSerializer::write(const IfcGeom::BRepElement* o) { } brep_strings.emplace_back(); + // OpenCascadeShape type ensured by the check at the method start. write_shape(std::static_pointer_cast(it->Shape())->shape(), brep_strings.back()); parts[i].surface_style = { "", "", 0, {nan,nan,nan}, {nan,nan,nan}, nan, nan }; @@ -671,6 +689,7 @@ void HdfSerializer::write(const IfcGeom::TriangulationElement* o) { write_dataset(meshGroup, DATASET_NAME_UVCOORDS, mesh.uvs(), 2); write_dataset(meshGroup, DATASET_NAME_MATERIAL_IDS, mesh.material_ids(), 1); write_dataset(meshGroup, DATASET_NAME_ITEM_IDS, mesh.item_ids(), 1); + write_dataset(meshGroup, DATASET_NAME_EDGES_ITEM_IDS, mesh.edges_item_ids(), 1); { auto& ts = mesh.materials(); diff --git a/src/serializers/HdfSerializer.h b/src/serializers/HdfSerializer.h index d5846337f6..6dab05eaad 100644 --- a/src/serializers/HdfSerializer.h +++ b/src/serializers/HdfSerializer.h @@ -90,7 +90,9 @@ private: std::map group_cache_; H5::Group createRepresentationGroup(const H5::Group& element_group, const std::string& gid); - void read_surface_style(surface_style_serialization& sss, const ifcopenshell::geometry::taxonomy::style::ptr& style_ptr); + void read_surface_style(const surface_style_serialization& s, + ifcopenshell::geometry::taxonomy::style& gss, + IfcParse::IfcFile& f); void write_style(surface_style_serialization& data, const ifcopenshell::geometry::taxonomy::style::ptr& s); public: diff --git a/src/serializers/StepSerializer.h b/src/serializers/StepSerializer.h index 19144a35cc..da3335bde4 100644 --- a/src/serializers/StepSerializer.h +++ b/src/serializers/StepSerializer.h @@ -54,7 +54,7 @@ public: void setUnitNameAndMagnitude(const std::string& /*name*/, float magnitude) { const char* symbol = getSymbolForUnitMagnitude(magnitude); if (symbol) { - Interface_Static::SetCVal("xstep.cascade.unit", symbol); + // Interface_Static::SetCVal("xstep.cascade.unit", symbol); Interface_Static::SetCVal("write.step.unit", symbol); } } diff --git a/src/serializers/SvgSerializer.cpp b/src/serializers/SvgSerializer.cpp index 7733889648..463c240e0f 100644 --- a/src/serializers/SvgSerializer.cpp +++ b/src/serializers/SvgSerializer.cpp @@ -646,6 +646,8 @@ void SvgSerializer::write(const IfcGeom::BRepElement* brep_obj) { view_box_3d_.emplace(); BRepBndLib::AddOBB(compound_unmirrored, *view_box_3d_, false, false, false); #endif + } else { + Logger::Error("Failed to box or edge from drawing annotation"); } std::vector props; @@ -2401,13 +2403,15 @@ namespace { std::string SvgSerializer::writeMetadata(const drawing_meta& m) { gp_Trsf trsf; trsf.SetTransformation(m.pln_3d.Position(), gp::XOY()); - // @todo - std::array, 4> m4 = {{ - {{ 1, 0, 0, 0 }}, - {{ 0, 1, 0, 0 }}, - {{ 0, 0, 1, 0 }}, - {{ 0, 0, 0, 1 }} - }}; + NCollection_Mat4 mat4; + trsf.GetMat4(mat4); + const auto* d = mat4.GetData(); + std::array, 4> m4 = { { + {{ d[0], d[4], d[8], d[12] }}, + {{ d[1], d[5], d[9], d[13] }}, + {{ d[2], d[6], d[10], d[14] }}, + {{ d[3], d[7], d[11], d[15] }} + } }; return namespace_prefix_ + "plane=\""+ array_to_string(m4) +"\" " + namespace_prefix_ + "matrix3=\"" + array_to_string(m.matrix_3) + "\""; } diff --git a/src/serializers/TtlWktSerializer.cpp b/src/serializers/TtlWktSerializer.cpp index b6b7698e2a..e9383e44b5 100644 --- a/src/serializers/TtlWktSerializer.cpp +++ b/src/serializers/TtlWktSerializer.cpp @@ -177,7 +177,7 @@ namespace { } std::string escape_for_turtle(const std::u32string& input) { - std::wostringstream escaped; + std::ostringstream escaped; escaped << "\""; for (auto& c : input) { @@ -200,7 +200,7 @@ namespace { default: if (c < 0x20 || c > 0x7E) { escaped << "\\u" - << std::hex << std::setw(4) << std::setfill(L'0') + << std::hex << std::setw(4) << std::setfill('0') << (c & 0xFFFF); } else { escaped.put(c); @@ -209,7 +209,7 @@ namespace { } } escaped << "\""; - return IfcUtil::convert_utf8(escaped.str()); + return escaped.str(); } template @@ -262,16 +262,16 @@ void TtlWktSerializer::write(const IfcGeom::TriangulationElement* o) { filename_.stream << ttl_object_id(o) << " a geo:Feature ;\n"; filename_.stream << " dcterms:identifier " << escape_for_turtle( - IfcUtil::convert_utf8_to_utf32(o->guid())) << " ;\n"; + IfcUtil::convert_utf8(o->guid())) << " ;\n"; filename_.stream << " rdfs:label " << escape_for_turtle( - IfcUtil::convert_utf8_to_utf32(o->name()) + IfcUtil::convert_utf8(o->name()) ) << " ;\n"; filename_.stream << " geo:hasGeometry " << ttl_object_id(o, "_geometry") << " .\n\n"; if (!o->geometry().polyhedral_faces_with_holes().empty()) { filename_.stream << ttl_object_id(o, "_geometry") << " a geo:Geometry ;\n"; filename_.stream << " geo:asWKT " << escape_for_turtle( - IfcUtil::convert_utf8_to_utf32( + IfcUtil::convert_utf8( capture_output( emit_polyhedral_surface, o->geometry().verts(), @@ -314,7 +314,7 @@ void TtlWktSerializer::write(const IfcGeom::TriangulationElement* o) filename_.stream << ttl_object_id(o) << " geo:hasGeometry " << ttl_object_id(o, "_footprint_geometry") << " .\n\n"; filename_.stream << ttl_object_id(o, "_footprint_geometry") << " a geo:Geometry ;\n"; filename_.stream << " geo:asWKT " << escape_for_turtle( - IfcUtil::convert_utf8_to_utf32( + IfcUtil::convert_utf8( capture_output( // @nb this is line_component, because this is the linestring // from a faceboundary, not the edges as pairs of indices. @@ -341,7 +341,7 @@ void TtlWktSerializer::write(const IfcGeom::TriangulationElement* o) } } filename_.stream << " geo:asWKT " << escape_for_turtle( - IfcUtil::convert_utf8_to_utf32( + IfcUtil::convert_utf8( capture_output( emit_line_strings, o->geometry().verts(), @@ -355,9 +355,9 @@ void TtlWktSerializer::write(const IfcGeom::BRepElement* brep_obj) { #ifdef IFOPSH_WITH_OPENCASCADE filename_.stream << ttl_object_id(brep_obj) << " a geo:Feature ;\n"; filename_.stream << " dcterms:identifier " << escape_for_turtle( - IfcUtil::convert_utf8_to_utf32(brep_obj->guid())) << " ;\n"; + IfcUtil::convert_utf8(brep_obj->guid())) << " ;\n"; filename_.stream << " rdfs:label " << escape_for_turtle( - IfcUtil::convert_utf8_to_utf32(brep_obj->name()) + IfcUtil::convert_utf8(brep_obj->name()) ) << " .\n"; // @todo unify logic with SVG serializer @@ -391,7 +391,12 @@ void TtlWktSerializer::write(const IfcGeom::BRepElement* brep_obj) { double x1, y1, zmin, x2, y2, zmax; bb.Get(x1, y1, zmin, x2, y2, zmax); - gp_Pln pln(gp_Pnt(0, 0, zmin + 1.), gp::DZ()); + auto height = zmax - zmin; + auto section_height = (height < (1. + 1.e-5)) ? (height / 2.0) : 1.0; + + filename_.stream << ttl_object_id(brep_obj) << " geo:hasMetricLength " << height << " .\n\n"; + + gp_Pln pln(gp_Pnt(0, 0, zmin + section_height), gp::DZ()); Handle(TopTools_HSequenceOfShape) wires = new TopTools_HSequenceOfShape(); @@ -431,7 +436,7 @@ void TtlWktSerializer::write(const IfcGeom::BRepElement* brep_obj) { filename_.stream << ttl_object_id(brep_obj) << " geo:hasGeometry " << ttl_object_id(brep_obj, postfix.c_str()) << " .\n\n"; filename_.stream << ttl_object_id(brep_obj, postfix.c_str()) << " a geo:Geometry ;\n"; filename_.stream << " geo:asWKT " << escape_for_turtle( - IfcUtil::convert_utf8_to_utf32( + IfcUtil::convert_utf8( capture_output( emit_line_component, loop_coords, diff --git a/src/serializers/schema_dependent/XmlSerializer.cpp b/src/serializers/schema_dependent/XmlSerializer.cpp index 590fdcb2fa..87b83693d6 100644 --- a/src/serializers/schema_dependent/XmlSerializer.cpp +++ b/src/serializers/schema_dependent/XmlSerializer.cpp @@ -219,9 +219,9 @@ ptree* descend(ifcopenshell::geometry::abstract_mapping* mapping, A* instance, p // Returns related entity instances using IFC's objectified relationship // model. The second and third argument require a member function pointer. template -typename V::list::ptr get_related(T* t, F f, G g) { +auto get_related(T* t, F f, G g) { typename U::list::ptr li = (*t.*f)()->template as(); - typename V::list::ptr acc(new typename V::list); + typename aggregate_of::ptr acc(new aggregate_of); for (typename U::list::it it = li->begin(); it != li->end(); ++it) { U* u = *it; try { @@ -305,6 +305,16 @@ ptree* descend(ifcopenshell::geometry::abstract_mapping* mapping, IfcSchema::Ifc (object, &IfcSchema::IfcObject::IsDefinedBy, &IfcSchema::IfcRelDefinesByProperties::RelatingPropertyDefinition); +#ifdef SCHEMAS_HAS_IfcPropertySetDefinitionSet + aggregate_of::ptr property_set_sets = get_related + + (object, &IfcSchema::IfcObject::IsDefinedBy, &IfcSchema::IfcRelDefinesByProperties::RelatingPropertyDefinition); + + for (auto& s : *property_set_sets) { + property_sets->push((decltype(property_sets))*s); + } +#endif + for (IfcSchema::IfcPropertySetDefinition::list::it it = property_sets->begin(); it != property_sets->end(); ++it) { IfcSchema::IfcPropertySetDefinition* pset = *it; if (pset->declaration().is(IfcSchema::IfcPropertySet::Class())) { @@ -352,7 +362,7 @@ ptree* descend(ifcopenshell::geometry::abstract_mapping* mapping, IfcSchema::Ifc } } -#ifdef SCHEMA_HAS_IfcAlignmentSegment +#if defined(SCHEMA_HAS_IfcAlignmentSegment) && defined(SCHEMA_IfcAlignmentSegment_HAS_DesignParameters) if (auto* als = product->as()) { ptree node; format_entity_instance(mapping, als->DesignParameters(), node, child, false); diff --git a/src/serializers/util.h b/src/serializers/util.h index cb7ad3e446..24ffd9485b 100644 --- a/src/serializers/util.h +++ b/src/serializers/util.h @@ -22,6 +22,8 @@ #include #include +#include +#include #include @@ -50,7 +52,7 @@ namespace util { void assign(const double& d) { this->d = d; } const double& value() const { return d; } double& value() { return d; } - std::string str() const { std::stringstream ss; ss << d; return ss.str(); } + std::string str() const { std::stringstream ss; ss << std::setprecision(std::numeric_limits::max_digits10) << d; return ss.str(); } virtual ~float_item() {}; }; private: diff --git a/src/svgfill b/src/svgfill index ff00026cd3..29fbc17ede 160000 --- a/src/svgfill +++ b/src/svgfill @@ -1 +1 @@ -Subproject commit ff00026cd359d83c8aebe43b550f7f75a04a359a +Subproject commit 29fbc17edec61b4f774ba8e87d4308983a75fc90 diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 9f07af042f..4e510137d9 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -87,6 +87,11 @@ IF %VS_VER%==2008 set PATH=C:\Windows\Microsoft.NET\Framework\v3.5;%PATH% :: User-configurable build options IF NOT DEFINED IFCOS_INSTALL_PYTHON set IFCOS_INSTALL_PYTHON=TRUE +set PYTHON_VERSION=3.11 +py -%PYTHON_VERSION% --version 2>&1>NUL +IF %ERRORLEVEL%==0 set IFCOS_INSTALL_PYTHON=EXISTS +set PYTHON_VERSION=%PYTHON_VERSION%.7 + IF NOT DEFINED IFCOS_NUM_BUILD_PROCS set IFCOS_NUM_BUILD_PROCS=%NUMBER_OF_PROCESSORS% :: For subroutines @@ -143,6 +148,8 @@ echo Defaults to Build if not specified. Rebuild/Clean also uninstalls Pytho call cecho.cmd 0 13 "* IFCOS_INSTALL_PYTHON`t= %IFCOS_INSTALL_PYTHON%" echo - Download and install Python. echo Set to something other than TRUE if you wish to use an already installed version of Python. +echo EXISTS value is set automatically if same Python version is already found on the system +echo and we won't be able to install it again. call cecho.cmd 0 13 "* IFCOS_NUM_BUILD_PROCS`t= %IFCOS_NUM_BUILD_PROCS%" echo - How many MSBuild.exe processes may be run in parallel. echo Defaults to NUMBER_OF_PROCESSORS. Used also by other IfcOpenShell build scripts. @@ -167,16 +174,16 @@ echo. cd "%DEPS_DIR%" :: VERSIONS -set HDF5_VERSION=1.8.22 -set HDF5_VERSION_MAJOR=1.8 +set HDF5_VERSION=1.12.1 +set HDF5_VERSION_MAJOR=1.12 set OCCT_VERSION=7.8.1 :: NOTE If updating the default Python version, change PY_VER_MAJOR_MINOR accordingly in run-cmake.bat -set PYTHON_VERSION=3.11.7 +set PYTHON_VERSION=%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%" -for /f "tokens=1,2,3 delims=." %%a in ("%PYTHON_VERSION%") do ( +for /f "tokens=1,2,3 delims=." %%a in ("%PYTHON_VERSION%") do ( set PY_VER_MAJOR_MINOR=%%a%%b ) IF "%IFCOS_INSTALL_PYTHON%"=="TRUE" ( @@ -253,7 +260,7 @@ git clean -fdx REM There probably need to be quotes here around the filename powershell -c "get-content %~dp0patches\mpir.patch | %%{$_ -replace \"sdk\",\"%UCRTVersion%\"} | %%{$_ -replace \"fn\",\"lib_mpir_cxx\"}" | git apply --unidiff-zero --ignore-whitespace IF NOT %ERRORLEVEL%==0 GOTO :Error -powershell -c "get-content %~dp0patches\mpir.patch | %%{$_ -replace \"sdk\",\"%UCRTVersion%\"} | %%{$_ -replace \"fn\",\"lib_mpir_gc\"}" | git apply --unidiff-zero --ignore-whitespace +powershell -c "get-content %~dp0patches\mpir.patch | %%{$_ -replace \"sdk\",\"%UCRTVersion%\"} | %%{$_ -replace \"fn\",\"lib_mpir_gc\"}" | git apply --unidiff-zero --ignore-whitespace IF NOT %ERRORLEVEL%==0 GOTO :Error if NOT "%USE_STATIC_RUNTIME%"=="FALSE" git apply "%~dp0patches\mpir_runtime.patch" --unidiff-zero --ignore-whitespace IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -301,26 +308,33 @@ IF NOT %ERRORLEVEL%==0 GOTO :Error :HDF5 set DEPENDENCY_NAME=hdf5 -set DEPENDENCY_DIR=%DEPS_DIR% +set DEPENDENCY_DIR=%DEPS_DIR%\hdf5-%HDF5_VERSION% cd "%DEPENDENCY_DIR%" -set HDF5_CMAKE_ZIP=CMake-hdf5-%HDF5_VERSION%.zip -set HDF5_INSTALL_ZIP_NAME=HDF5-%HDF5_VERSION%-win%ARCH_BITS% +set HDF5_CMAKE_ZIP=hdf5-%HDF5_VERSION%.zip +set HDF5_INSTALL_NAME=HDF5-%HDF5_VERSION%-win%ARCH_BITS% -IF EXIST "%INSTALL_DIR%\%HDF5_INSTALL_ZIP_NAME%" ( - echo Found existing "%INSTALL_DIR%\%HDF5_INSTALL_ZIP_NAME%", skipping +IF EXIST "%INSTALL_DIR%\%HDF5_INSTALL_NAME%" ( + echo Found existing "%INSTALL_DIR%\%HDF5_INSTALL_NAME%", skipping goto :Boost ) if "%ARCH_BITS%"=="64" set ARCH_BITS_64=64 -call :DownloadFile http://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%HDF5_VERSION_MAJOR%/hdf5-%HDF5_VERSION%/src/CMake-hdf5-%HDF5_VERSION%.zip "%DEPS_DIR%" %HDF5_CMAKE_ZIP% +call :DownloadFile ^ + http://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%HDF5_VERSION_MAJOR%/hdf5-%HDF5_VERSION%/src/%HDF5_CMAKE_ZIP% ^ + "%DEPS_DIR%" %HDF5_CMAKE_ZIP% IF NOT %ERRORLEVEL%==0 GOTO :Error -call :ExtractArchive %HDF5_CMAKE_ZIP% "%DEPS_DIR%" "%DEPS_DIR%\CMake-hdf5-%HDF5_VERSION%" +call :ExtractArchive %HDF5_CMAKE_ZIP% "%DEPS_DIR%" "%DEPS_DIR%\hdf5-%HDF5_VERSION%" +IF NOT %ERRORLEVEL%==0 GOTO :Error +pushd "%DEPS_DIR%\hdf5-%HDF5_VERSION%" +call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\%HDF5_INSTALL_NAME%" ^ + -DHDF5_ENABLE_Z_LIB_SUPPORT=OFF -DBUILD_TESTING=OFF ^ + -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% +IF NOT %ERRORLEVEL%==0 GOTO :Error +call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %DEBUG_OR_RELEASE% IF NOT %ERRORLEVEL%==0 GOTO :Error -pushd "%DEPS_DIR%\CMake-hdf5-%HDF5_VERSION%" -git apply %~dp0patches\hdf5vs2022.patch --ignore-whitespace -rem It is not checked whether this patch is applied successfully! -ctest -S HDF5config.cmake,BUILD_GENERATOR=VS%VS_VER%%ARCH_BITS_64% -C %BUILD_CFG% -V -O hdf5.log -call :ExtractArchive %HDF5_INSTALL_ZIP_NAME%.zip "%INSTALL_DIR%" "%INSTALL_DIR%\%HDF5_INSTALL_ZIP_NAME%" popd :: Note all of the dependencies have appropriate label so that user can easily skip something if wanted @@ -360,7 +374,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=stage/%GEN_SHORTHAND% IF NOT %ERRORLEVEL%==0 GOTO :Error @@ -427,7 +441,7 @@ if not %ERRORLEVEL%==0 goto :Error call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\freetype.sln" %BUILD_CFG% if not %ERRORLEVEL%==0 goto :Error call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% -if not %ERRORLEVEL%==0 goto :Error +if not %ERRORLEVEL%==0 goto :Error set DEPENDENCY_NAME=Open CASCADE %OCCT_VERSION% set DEPENDENCY_DIR=%DEPS_DIR%\occt_git @@ -500,6 +514,12 @@ IF "%IFCOS_INSTALL_PYTHON%"=="TRUE" ( IF NOT EXIST "%PYTHONHOME%". ( call cecho.cmd 0 13 "Installing %DEPENDENCY_NAME%. Please be patient, this will take a while." start /w %PYTHON_INSTALLER% /quiet TargetDir="%PYTHONHOME%" + if errorlevel 1 ( + :: Standard installer doesn't support installing same Python version twice, + :: but we skip installation during IFCOS_INSTALL_PYTHON initialization. + call cecho.cmd 0 12 "Failed to install Python. Error code: !ERRORLEVEL!." + GOTO :Error + ) ) ELSE ( call cecho.cmd 0 13 "%DEPENDENCY_NAME% already installed. Skipping." ) @@ -539,7 +559,7 @@ IF EXIST "%INSTALL_DIR%\cgal" ( set DEPENDENCY_NAME=cgal set DEPENDENCY_DIR=%DEPS_DIR%\cgal -call :GitCloneAndCheckoutRevision https://github.com/CGAL/cgal.git "%DEPENDENCY_DIR%" v5.2.3 +call :GitCloneAndCheckoutRevision https://github.com/CGAL/cgal.git "%DEPENDENCY_DIR%" v5.5.5 IF NOT %ERRORLEVEL%==0 GOTO :Error cd "%DEPENDENCY_DIR%" git reset --hard @@ -561,6 +581,11 @@ IF NOT %ERRORLEVEL%==0 GOTO :Error :Eigen set DEPENDENCY_NAME=Eigen set DEPENDENCY_DIR=%INSTALL_DIR%\%DEPENDENCY_NAME% + +IF EXIST "%INSTALL_DIR%\%DEPENDENCY_NAME%" ( + echo Found existing "%INSTALL_DIR%\%DEPENDENCY_NAME%", skipping + goto :Successful +) call :GitCloneAndCheckoutRevision https://gitlab.com/libeigen/eigen.git "%DEPENDENCY_DIR%" 3.3.9 :rocksdb @@ -594,7 +619,7 @@ IF NOT %ERRORLEVEL%==0 GOTO :Error :: IF NOT %ERRORLEVEL%==0 GOTO :Error :: call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% :: IF NOT %ERRORLEVEL%==0 GOTO :Error -:: +:: :: :usd :: set DEPENDENCY_NAME=usd :: set DEPENDENCY_DIR=%DEPS_DIR%\usd @@ -727,7 +752,7 @@ call git checkout %3 set RET=%ERRORLEVEL% popd exit /b %RET% - + :: RunCMake - Runs CMake for a CMake-based project :: Params: %* cmakeOptions :: NOTE cd to root CMakeLists.txt folder before calling this if the CMakeLists.txt is not in the repo root. @@ -736,7 +761,7 @@ call cecho.cmd 0 13 "Running CMake for %DEPENDENCY_NAME%." IF NOT EXIST %BUILD_DIR%. mkdir %BUILD_DIR% IF NOT %ERRORLEVEL%==0 GOTO :Error pushd %BUILD_DIR% -:: TODO make deleting cache a parameter for this subroutine? We probably want to delete the +:: TODO make deleting cache a parameter for this subroutine? We probably want to delete the :: cache always e.g. when we've had new changes in the repository. IF %BUILD_TYPE%==Rebuild IF EXIST CMakeCache.txt. del CMakeCache.txt diff --git a/win/patches/hdf5vs2022.patch b/win/patches/hdf5vs2022.patch deleted file mode 100644 index e5a803f47f..0000000000 --- a/win/patches/hdf5vs2022.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- HDF5config.cmake 2021-02-05 14:38:05.000000000 +0000 -+++ HDF5config.cmake 2022-01-21 10:41:19.705646800 +0000 -@@ -110,7 +110,19 @@ - if (WIN32 AND NOT MINGW) - set (SITE_OS_NAME "Windows") - set (SITE_OS_VERSION "WIN10") -- if (BUILD_GENERATOR STREQUAL "VS201964") -+ if (BUILD_GENERATOR STREQUAL "VS202264") -+ set (CTEST_CMAKE_GENERATOR "Visual Studio 17 2022") -+ set (CMAKE_GENERATOR_ARCHITECTURE "x64") -+ set (SITE_OS_BITS "64") -+ set (SITE_COMPILER_NAME "vs2022") -+ set (SITE_COMPILER_VERSION "17") -+ elseif (BUILD_GENERATOR STREQUAL "VS2022") -+ set (CTEST_CMAKE_GENERATOR "Visual Studio 17 2022") -+ set (CMAKE_GENERATOR_ARCHITECTURE "Win32") -+ set (SITE_OS_BITS "32") -+ set (SITE_COMPILER_NAME "vs2022") -+ set (SITE_COMPILER_VERSION "17") -+ elseif (BUILD_GENERATOR STREQUAL "VS201964") - set (CTEST_CMAKE_GENERATOR "Visual Studio 16 2019") - set (CMAKE_GENERATOR_ARCHITECTURE "x64") - set (SITE_OS_BITS "64") diff --git a/win/run-cmake.bat b/win/run-cmake.bat index ab113435d4..7c9aeb08f6 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -91,15 +91,14 @@ set OPENCOLLADA_INCLUDE_DIR=%INSTALL_DIR%\OpenCOLLADA\include\opencollada set OPENCOLLADA_LIBRARY_DIR=%INSTALL_DIR%\OpenCOLLADA\lib\opencollada set LIBXML2_INCLUDE_DIR=%DEPS_DIR%\OpenCOLLADA\Externals\LibXML\include set LIBXML2_LIBRARIES=%INSTALL_DIR%\OpenCOLLADA\lib\opencollada\xml.lib -set HDF5_INCLUDE_DIR=%INSTALL_DIR%\HDF5-%HDF5_VERSION%-win%ARCH_BITS%\include -set HDF5_LIBRARY_DIR=%INSTALL_DIR%\HDF5-%HDF5_VERSION%-win%ARCH_BITS%\lib +set HDF5_INSTALL_DIR=%INSTALL_DIR%\HDF5-%HDF5_VERSION%-win%ARCH_BITS% if not defined PY_VER_MAJOR_MINOR set PY_VER_MAJOR_MINOR=311 if not defined PYTHONHOME set PYTHONHOME=%INSTALL_DIR%\Python%PY_VER_MAJOR_MINOR% set PYTHON_INCLUDE_DIR=%PYTHONHOME%\include set PYTHON_LIBRARY=%PYTHONHOME%\libs\python%PY_VER_MAJOR_MINOR%.lib set PYTHON_EXECUTABLE=%PYTHONHOME%\python.exe -set SWIG_DIR=%INSTALL_DIR%\swigwin -set PATH=%PATH%;%SWIG_DIR%;%PYTHONHOME% +set SWIG_EXECUTABLE=%SWIG_DIR%\swig.exe +set PATH=%PATH%;%PYTHONHOME% set JSON_INCLUDE_DIR=%INSTALL_DIR%\json if not defined ADD_COMMIT_SHA set ADD_COMMIT_SHA=Off @@ -133,8 +132,7 @@ echo OPENCOLLADA_INCLUDE_DIR = %OPENCOLLADA_INCLUDE_DIR% echo OPENCOLLADA_LIBRARY_DIR = %OPENCOLLADA_LIBRARY_DIR% echo LIBXML2_INCLUDE_DIR = %LIBXML2_INCLUDE_DIR% echo LIBXML2_LIBRARIES = %LIBXML2_LIBRARIES% -echo HDF5_INCLUDE_DIR = %HDF5_INCLUDE_DIR% -echo HDF5_LIBRARY_DIR = %HDF5_LIBRARY_DIR% +echo HDF5_INSTALL_DIR = %HDF5_INSTALL_DIR% echo PYTHONHOME = %PYTHONHOME% echo PYTHON_INCLUDE_DIR = %PYTHON_INCLUDE_DIR% echo PYTHON_LIBRARY = %PYTHON_LIBRARY% @@ -163,9 +161,15 @@ if not (%1)==() if exist CMakeCache.txt. del /Q CMakeCache.txt call cecho.cmd 0 13 "Running CMake for %PROJECT_NAME%." 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 -DADD_COMMIT_SHA=%ADD_COMMIT_SHA% %ARGUMENTS% + 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_PREFIX_PATH="%HDF5_INSTALL_DIR%" ^ + -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 -DADD_COMMIT_SHA=%ADD_COMMIT_SHA% %ARGUMENTS% + cmake.exe %CMAKELISTS_DIR% -G %GENERATOR% -A %VS_PLATFORM% ^ + -DCMAKE_INSTALL_PREFIX="%CMAKE_INSTALL_PREFIX%" -DBoost_NO_BOOST_CMAKE=ON ^ + -DCMAKE_PREFIX_PATH="%HDF5_INSTALL_DIR%" ^ + -DADD_COMMIT_SHA=%ADD_COMMIT_SHA% %ARGUMENTS% ) IF NOT %ERRORLEVEL%==0 GOTO :Error diff --git a/win/vs-cfg.cmd b/win/vs-cfg.cmd index 2d1f73c263..b086d6db5a 100644 --- a/win/vs-cfg.cmd +++ b/win/vs-cfg.cmd @@ -110,7 +110,7 @@ IF "!GENERATOR!"=="" IF NOT "%VisualStudioVersion%"=="" ( set GENERATOR_CHECK=%GENERATOR: Win64=% cmake --help | findstr /c:%GENERATOR_CHECK% >nul if not %ERRORLEVEL%==0 ( -call utils\cecho.cmd 0 12 "%~nx0: The used CMake version does not support '`"!GENERATOR!`'"- cannot proceed." +call utils\cecho.cmd 0 12 "%~nx0: The used CMake version does not support generator '`"!GENERATOR!`'"- cannot proceed." exit /b 1 ) @@ -207,6 +207,7 @@ IF %VS_PLATFORM%==ARM64 ( FOR /f "delims=" %%i in ('where cmake') DO set CMAKE_PATH=%%i IF NOT "%CMAKE_PATH%"=="" ( FOR /f "delims=" %%i in ('cmake --version ^| findstr /C:"cmake version 3"') DO GOTO :CMake3AndNewer + FOR /f "delims=" %%i in ('cmake --version ^| findstr /C:"cmake version 4"') DO GOTO :CMake3AndNewer ) :: reject older CMake, see also build-deps.cmd