美文网首页Opencas...
Compile_Netgen_WITH_OpenCascade

Compile_Netgen_WITH_OpenCascade

作者: alamu | 来源:发表于2016-05-04 11:11 被阅读488次

    title: Compile_Netgen_WITH_OpenCascade
    date: 2016-04-23 21:14:42
    categories: 三维
    tags: [Netgen,Opencascade]


    结合OCCT编译Netgen

    date: 2016-04-23 19:54:25

    前言

    目前大多数netgen编译的教程都是without OCCT.

    环境:

    windows 7

    VS2010

    Open Cascade6.5.1

    Netgen5.0.0

    编译版本:

    debug x64

    Netgen5.0.0下载

    下载源文件:

    Netgen5.0.0 x64.exe

    第三方库文件:

    pthreads-w32_x64.zip

    TclTkTixTogl_x64.zip

    Opencascade

    注: 这里必须预先已经编译好OCCT6.5.1 本文默认读者已经编译好. 可直接调用库文件进行开发.

    文件排放结构

    文件结构

    编译前准备工作

    修改windows目录下的postBuild_netgen.bat文件:

    
    删除下面代码:
    
        if defined NETGENDIR  ( 
           echo Environment variable NETGENDIR found: %NETGENDIR%
           set INSTALL_FOLDER=%NETGENDIR%\..
        ) else (
           echo Environment variable NETGENDIR not found.... using default location!!!
           if /i "%W_WO_OCC%" == "OCC" (
              set INSTALL_FOLDER=%PROJ_DIR%..\..\%PROJ_NAME%-instOCC_%BUILD_ARCH%
           ) else (
              set INSTALL_FOLDER=%PROJ_DIR%..\..\%PROJ_NAME%-instNoOCC_%BUILD_ARCH%
           )   
        )
    
    替换为
    
    set INSTALL_FOLDER=G:\netgen5.0
    
    
    
    在文件末尾添加
    
    REM *** Copy the 3rd Library files into the Install Folder ***
    
        set TCL_LIB_DIR=%INSTALL_FOLDER%\ext_libs\tcl\lib
        set TCL_BIN_DIR=%PROJ_DIR%..\..\ext_libs\tcl\bin
        set PTHREAD_LIB_DIR=%PROJ_DIR%..\..\ext_libs\pthread-w32\lib
        echo Installing 3rd Library files into %INSTALL_FOLDER%\bin ....
        xcopy  "%TCL_BIN_DIR%\*.dll" "%INSTALL_FOLDER%\bin\" /i /d /y
        xcopy  "%PTHREAD_LIB_DIR%\*.dll" "%INSTALL_FOLDER%\bin\" /i /d /y
        xcopy  "%TCL_LIB_DIR%" "%INSTALL_FOLDER%\lib\" /e /i /d /y
        if errorlevel 1 goto ThreerdLibraryFailed
        echo Installing 3rd Library Files: Completed OK!!
        :ThreerdLibraryFailed
        echo POSTBUILD Script for %TCL_LIB_DIR% FAILED.....
    
    

    编译Netgen5.0.0

    使用VS2010打开 E:\NetGen5.0\netgen-5.0.0\windows\netgen-5.0.sln

    出现问题1

    问题1

    解决办法:

    PI问题

    PI没有定义, 这里我们使用改版后的M_PI

    
    
    在 e:\NetGen\netgen-5.0.0\libsrc\occ\Partition_Loop2d.cxx 文件的开头加入以下宏定义: 
    
    
        #ifndef PI
        
        #define PI M_PI
        
        #endif
    
    

    # value问题

    value: 不是 Extreme_ExtPS 的成员

    问题2

    在代码中我们可以看到作者为了兼顾OCCT多版本, 所作出的注释
    所以,我们将V6.3行注释, 删除v6.5行的注释

    接着编译............

    出现问题2

    无法解析的外部符号 Ng_occ_Init

    Nginit问题

    1,在附加目录中包含 (主目录)\libsrc\occ
    2,在e:\NetGen\netgen-5.0.0\ng\ngpkg.cpp文件中

    #include <occpkg.cpp>
    

    注意: 该包含放在其他include之前.

    编译......

    问题:

    Ng_occ_Init调用不明确

    结合OCCT编译Netgen9

    解决办法:

    将ngp.cpp中的声明注释掉!

    结合OCCT编译Netgen10

    问题:

    以上包含后出现无法解析的外部符号:

    结合OCCT编译Netgen8

    这是因为occpkg.cpp中调用了:

    static VisualSceneOCCGeometry vsoccgeom;

    而以上类却找不到实现的cpp , 而E:\NetGen\netgen-5.0.0\libsrc\occ\vsocc.cpp就在occ文件夹下.

    解决办法:

    项目->添加现有项:

    vsocc.hpp

    vsocc.cpp

    接着编译....

    成功!

    编译nglib

    需要修改postBuild_nglib.bat文件:

        删除下面代码:
        
        if defined NETGENDIR (
           echo Environment variable NETGENDIR found: %NETGENDIR%
           set INSTALL_FOLDER=%NETGENDIR%\..
        ) else (
           echo Environment variable NETGENDIR not found.... using default location!!!
           if /i "%W_WO_OCC%" == "OCC" (
              set INSTALL_FOLDER=%PROJ_DIR%..\..\%PROJ_NAME%-instOCC_%BUILD_ARCH%
           ) else (
              set INSTALL_FOLDER=%PROJ_DIR%..\..\%PROJ_NAME%-instNoOCC_%BUILD_ARCH%
           )   
        )
        
        替换为
        
        set INSTALL_FOLDER=G:\netgen5.0
    
    

    发现项目中竟然没有x64项目和debug(OCC) 所以只能自己在配置器中自己定义!

    注意! 这样定义只是个名称而已, 加入OCC关键的体现地方在于宏定义,
    即 只要是with OCC就必须要在预处理器中定义:

    _OCC64
    Standard_EXPORT=
    OCCGEOMETRY

    这是非常关键的, 否则就不能称之为 WITH OCC !!!!

    编译非常顺利. 直接完成.

    编译完成后,运行nglib文件夹下的ng_vol.cpp示例程序.如果一切运行正常, 打印出正确的信息. 那么证明一切顺利.

    注:

    备注1

    本文中编译过程中默认 读者知道如何将OCCT的.h文件 .lib文件目录如何添加到netgen和nglib项目中

    备注2

    本文默认, 读者知道如何在编译完成之后 配置示例程序.

    备注3

    如果编译一切都顺利.只是会出现postBuild之类的FAILED错误. 这是因为post_Build.bat文件中要求的文件拷贝没有正确. 如果你真的搞不懂, 那你就自己手动拷贝即可.不用非得让程序自动拷贝. (其实仔细研究post_Build.bat文件,就知道也就那么回事了.)

    参考学习

    NetGen用户手册

    http://blog.csdn.net/zhouschina/article/details/9050373

    http://blog.csdn.net/pizibing880909/article/details/21710767

    相关文章

      网友评论

        本文标题:Compile_Netgen_WITH_OpenCascade

        本文链接:https://www.haomeiwen.com/subject/gjprrttx.html