这段时间在做IfcOpenShell相关的算法研究,之前配置环境的时候总是出问题,这个星期在很多尝试和排错之后终于成功编译了我要研究的核心部分——IfcConvert,现在将经验分享一下。如果只是需要工具来转换和读取.ifc文件的话,可以直接在官网下载各类工具。


一、准备

配置环境:

IfcOpenShell:

    IfcOpenShell_0.4.0 IfcOpenShell源码下载

Linux:

    虚拟机:VMware_workstation_14_pro

    系统:ubuntu_16.04_desktop_amd64

               系统设定(根据自己电脑设定,我的电脑是8g内存+4核):

                      单线双核

                      2G内存

                      20G空间

Windows:

    系统:Windows10

    VS版本:Visual Studio 2013 (VC12)

    依赖库:boost_1.56.0(或其它版本) boost官网下载

                 opencascade_6.8.0(高版本要注意64/32位) occ官网下载 

                 occ如果下载较慢可以去我的资源页下载或者

                 网盘链接:pan.baidu.com/s/1-U8kfTgsRFix3SqjXPzFDw 密码:3jcp


二、依赖库搭建

linux:

    linux下配置IfcOpenShell步骤很简单,只要根据GitHub上的步骤来就可以了。先配置g++、gcc、cmake、python等基本环境,然后从linux官方库中安装occ,还有OpenCOLLADA。

    要注意的就是

          1、保持网络通畅,保证各个依赖库的正常下载,ifcopenshell用官网上的git命令下载。

        2、使用虚拟机的时候,内存一定要设置成2G或以上,在前期尝试编译的时候我根据vmware的默认推荐设置了1G内存,后来在ifcopenshell编译的时候就总是在make那一步25%左右出现fatal error。上网找了很久也没有发现解决方法,重装虚拟机后将内存设定为Ubuntu官方推荐的2G才得以解决。

windows 

    windows下的occ直接从网站下载.exe安装以后就可以了,头文件和静态库已经可以使用了,我之前也编译过,不过没有影响后续的使用,有兴趣编译使用一下occ的读者可以参看博客

    boost库需要编译出库文件,boost下载解压以后目录如下


boost32位和64位编译的方法可以参考这篇博客,只用编译出库文件就可以进行后续的使用了。

至此,依赖项已经配置完成,我们可以进入ifcopenshell的编译了。


三、IfcOpenShell的编译

Linux

    linux下的编译就按照之前的网站就可以完成,完成后生成的IfcConvert可以把.ifc文件默认转化为1个.obj文件+1个.mtl文件,即剥离出模型和其材质贴图,其他格式请参照官网说明。

windows

      如果之前编译过OpenGL、OpenCV之类工程的读者应该对于IfcOpenShell的编译会比较得心应手,如果没有配置过也没有关系,可以一步步跟我来。

       1、打开官网下载的IfcOpenShell源码文件夹,进入到./win,打开.sln,用现有vs将解决方案单向升级。完成后在资源方案管理器中会出现7个解决方案,本文中编译的是IfcConvert。

        其它解决方案中,IfcMax是用来生成3DsMax的.ifc读取插件,编译时需要配置相关jdk,完成的插件在IfcOpenShell官网上有,可以下载试验(我试过针对64位3DsMax2015的插件但是加载失败了);IfcPython是提供Python库的生成,也需要相应环境的配置。

  

        2、IfcConvert引用了同目录下的IfcGeom和IfcParse,因此我们选中IfcConvert、IfcGeom、IfcParse三个解决方案右键属性,进入配置属性->VC++目录


        3、头文件和库文件。在包含目录下拉框中选择编辑,分别找到boost和occ目录,参考我的目录;同样,库目录也是找到相应的位置

头文件:源文件中#include对于boost的引用是#include<boost/*>,而对occ的引用是直接指向文件


库目录:注意库目录,还多了一个tbb目录

        4、链接库文件。选择IfcConvert解决方案,进入它的属性页,来到配置属性->链接器->输入,附加依赖项是对应到相应的静态库.dll文件,但是这里IfcOpenShell默认的名字都比我们目前的库名多了一个”d“在最后,配置过OpenCV的读者可能会有印象,尾缀有d代表是debug库,没有d则是release库。

        而通过我的实践,实际上这里debug和release用的库是同一个,所以把依赖项中所有文件名末尾有d的去掉一个d,没有的不用管就可以了。如:TKerneld.lib改为TKernel.lib


        5、这些都做完就可以进行编译了,默认的是debug模式,不过release模式也是相似的方法,记得重新关联一下头文件和库就行,完成后,进入IfcOpenShell的./build/debug目录,可以看到生成了.exe文件。

        但是这时由于动态库没有链接所以运行会报错,我们可以1)把.dll文件复制到.exe文件目录下 或者 2)把.dll文件复制到系统目录下(参考OpenGL和OpenCV类似问题)

需要添加的.dll文件就在boost和occ文件夹中,目录如下:


        如果有读者会添加独立运行的.exe的话,请留言或私戳我~


四、运行

        IfcConvert运行的方式可以参考./IfcOpenShell/README或者是源码中的IfcConvert.cpp,windows上运行很方便,直接拖动.ifc文件到.exe上就可以运行了。


        这里需要提示的是:

            1、默认转换的格式是.obj

            2、转换成.dae文件需要提供OpenCOLLADA库的支持 

            3、.ifc文件所在的位置一定要是全英文路径,否则会转换出错

        

欢迎交流和指正。

Logo

更多推荐