opensourceBIM / voxelization_toolkit

Voxelization Toolkit for (IFC) Building Models
MIT License
71 stars 14 forks source link

conda builds incompatible <-> ifcopenshell on channel ifcopenshell #12

Open jakob-beetz opened 1 year ago

jakob-beetz commented 1 year ago

Thanks for the amazing tool!

attempts on both win64 and ubuntu 20.04 to call voxec after doing

conda install -c conda-forge ifcopenshell
conda install -c ifcopenshell voxelization_toolkit

fail with voxec: symbol lookup error: voxec: undefined symbol: _ZNK16Standard_Failure14GetStackStringEv (linux) or the procedure entry point could not be locate in the dynamic link library [pathto]bin\voxec.exe (win64)

I tried to use older 3.9 3.10 versions of ifcopenshell from around the time of the last voxelization_toolkit builds in the ifcopenshell conda and conda-forge channels into fresh conda envs etc. to no avail.

Attempts to build on VS2019 and ubuntu give me (more) gray hair but no results:

I managed to build libvoxel.lib however, maybe I can play around with that a bit...

If somebody finds the time to update conda or has a some hints for a successful build I'd be really , really thankful.

Thanks a lot for this really cool project! Include citation reference from LDAC 21?

aothms commented 1 year ago

You were on the right track, but the dependency that needed to be downgraded was occt, which may or may not correspond to which ifcopenshell version it selects. In the end I got it up and running with the following versions:

ifcopenshell=v0.7.0a4-py310hf7dc881_1
occt=7.5.3-h8294837_4

I/We I think are still not fully understanding how to encode dependencies in yaml. For building IfcOpenShell is compatible with all occt versions (also the 7.7 that was recently introduced). But once IfcOpenShell has been built against a specific version then you can't arbitrarily switch versions. And I think this is what has happened since 7.7 was recently pushed to conda-forge.

running into issues with boost_1_76_0\boost\regex\v5\w32_regex_traits.hpp not being able to find / include ::GetUserDefaultLCID() from winnls.h into the global namespace ...

These boost regex failures have been plaguing us for some time. We have a similar issue causing the CI/CD build here in the voxel repo to break.

I see you're using boost v1.76, upgrading to 1.78 might help there because we have a specific check for that https://github.com/IfcOpenShell/IfcOpenShell/blob/v0.7.0/src/ifcgeom_schema_agnostic/IfcGeomFilter.h#L27

jakob-beetz commented 1 year ago

Brilliant! Thanks a lot for taking the time to look into this! Works with Duplex_A and the voxelfile described in the README.md!

Got it running in an anaconda3 shell on windows 11 (see complete specs below) doing:

conda create --name vox2
conda activate vox2
conda install -c conda-forge  ifcopenshell=v0.7.0a4=py310hf7dc881_1
conda install -c conda-forge  occt=7.5.3=h8294837_4
conda install -c ifcopenshell voxelization_toolkit

This is my environment if s.b. looks

conda info

     active environment : vox2
    active env location : [PATH]\anaconda3\envs\vox2
            shell level : 2
       user config file :[PATH]\.condarc
 populated config files : [PATH]\.condarc
          conda version : 4.12.0
    conda-build version : 3.21.8
         python version : 3.9.12.final.0
       virtual packages : __cuda=12.0=0
                          __win=0=0
                          __archspec=1=x86_64
       base environment : [PATH]\anaconda3  (writable)
      conda av data dir : C[PATH]\anaconda3\etc\conda
  conda av metadata url : None
           channel URLs : https://repo.anaconda.com/pkgs/main/win-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/win-64
                          https://repo.anaconda.com/pkgs/r/noarch
                          https://repo.anaconda.com/pkgs/msys2/win-64
                          https://repo.anaconda.com/pkgs/msys2/noarch

       envs directories : [PATH]\anaconda3\envs
                          [PATH]\.conda\envs
                          [PATH]\AppData\Local\conda\conda\envs
               platform : win-64
             user-agent : conda/4.12.0 requests/2.27.1 CPython/3.9.12 Windows/10 Windows/10.0.22000
          administrator : False
             netrc file : None
           offline mode : False

Also made progress in building everything using the boost 1.74.0 from [IfcOpenShellSrc]/_deps and _deps-vs2019-Win32-installed but running into linker issues that that probably stem from using vs2019 trying to use vs2017 occt .libs .... well keep posting.

Now, onward to understaning the toolkits DSL ;-)

Another attempt at IFC->gbXML interesting building on Marten Visschers https://github.com/MGVisschers/IFC-to-gbXML-converter ? Or is this done somewhere already?

aothms commented 1 year ago

When a model doesn't have 2nd level space boundaries, indeed voxelizing the spaces over a coarse grid can give you a reasonable approximation of it as we show in https://repository.tudelft.nl/islandora/object/uuid%3A98ad4f7e-105d-4511-baa8-57a088eb7c51

The real reason we built this was more for geometric analyses that require analysing the complete set of geometries but don't need full accuracy. The first real use case for this was detecting missing railings.