zoukankan      html  css  js  c++  java
  • Compile_Netgen_WITH_OpenCascade


    title: Compile_Netgen_WITH_OpenCascade
    date: 2016-04-23 21:14:42

    tags:

    结合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文件:

    1. 删除下面代码:
    2. ifdefined NETGENDIR (
    3. echo Environment variable NETGENDIR found:%NETGENDIR%
    4. set INSTALL_FOLDER=%NETGENDIR%..
    5. )else(
    6. echo Environment variable NETGENDIR not found....usingdefault location!!!
    7. if/i "%W_WO_OCC%"=="OCC"(
    8. set INSTALL_FOLDER=%PROJ_DIR%....\%PROJ_NAME%-instOCC_%BUILD_ARCH%
    9. )else(
    10. set INSTALL_FOLDER=%PROJ_DIR%....\%PROJ_NAME%-instNoOCC_%BUILD_ARCH%
    11. )
    12. )
    13. 替换为
    14. set INSTALL_FOLDER=G: etgen5.0
    15. 在文件末尾添加
    16. REM ***Copy the 3rdLibrary files into the InstallFolder***
    17. set TCL_LIB_DIR=%INSTALL_FOLDER%ext_libs cllib
    18. set TCL_BIN_DIR=%PROJ_DIR%....ext_libs clin
    19. set PTHREAD_LIB_DIR=%PROJ_DIR%....ext_libspthread-w32lib
    20. echo Installing3rdLibrary files into%INSTALL_FOLDER%in....
    21. xcopy "%TCL_BIN_DIR%*.dll""%INSTALL_FOLDER%in" /i /d /y
    22. xcopy "%PTHREAD_LIB_DIR%*.dll" "%INSTALL_FOLDER%in" /i /d /y
    23. xcopy "%TCL_LIB_DIR%""%INSTALL_FOLDER%lib" /e /i /d /y
    24. if errorlevel 1 goto ThreerdLibraryFailed
    25. echo Installing 3rd Library Files: Completed OK!!
    26. :ThreerdLibraryFailed
    27. echo POSTBUILD Script for %TCL_LIB_DIR% FAILED.....

    编译Netgen5.0.0

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

    出现问题1

    问题1

    解决办法:

    PI问题

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

    1. e:NetGen etgen-5.0.0libsrcoccPartition_Loop2d.cxx 文件的开头加入以下宏定义:
    2. #ifndef PI
    3. #define PI M_PI
    4. #endif
    5. ````
    6. ### # value问题
    7. value:不是Extreme_ExtPS的成员
    8. ![问题2](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen16.png)
    9. 在代码中我们可以看到作者为了兼顾OCCT多版本,所作出的注释
    10. 所以,我们将V6.3行注释,删除v6.5行的注释
    11. 接着编译............
    12. ### 出现问题2
    13. **无法解析的外部符号Ng_occ_Init**
    14. ![Nginit问题](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen17.png)
    15. 1,在附加目录中包含(主目录)libsrcocc
    16. 2,在e:NetGen etgen-5.0.0 g gpkg.cpp文件中
    17. #include<occpkg.cpp>
    18. 注意:该包含放在其他include之前.
    19. 编译......
    20. 问题:
    21. Ng_occ_Init调用不明确
    22. ![结合OCCT编译Netgen9](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen19.png)
    23. 解决办法:
    24. **将ngp.cpp中的声明注释掉!**
    25. ![结合OCCT编译Netgen10](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen110.png)
    26. 问题:
    27. 以上包含后出现无法解析的外部符号:
    28. ![结合OCCT编译Netgen8](http://7xtbgk.com2.z0.glb.qiniucdn.com/netgen18.png)
    29. 这是因为occpkg.cpp中调用了:
    30. staticVisualSceneOCCGeometry vsoccgeom;
    31. 而以上类却找不到实现的cpp ,E:NetGen etgen-5.0.0libsrcoccvsocc.cpp就在occ文件夹下.
    32. 解决办法:
    33. 项目->添加现有项:
    34. >vsocc.hpp
    35. >vsocc.cpp
    36. 接着编译....
    37. 成功!
    38. ## 编译nglib
    39. 需要修改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:
    etgen5.0
    

    “`

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

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

    _OCC64
    Standard_EXPORT=
    OCCGEOMETRY

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

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

     

    编译nglib 

     
    只有编译了nglib过后,才能将其整合到自己的程序当中去. 上面的netgen只是第一步, 这一步才是生成我们需要的关键文件:
     
    • nglib.dll     
    • nglib.lib
    • 相关头文件
     
     
    编译nglib就很简单了. 在windows文件夹中打开nglib.sln工程文件 .  将版本设为release(OCC)即可. 
    编译过程中会出现pthreadVC_64.dll文件找不到的情况,将链接器中pthreadVC_64.dll改为pthreadVC_x64.dll.
    还有就是可能找不到OCC的lib相关文件. (当你的OCC不是安装形式存在在电脑里的时候.).然后手动包含OCC的lib文件夹即可. 

    编译完成后,运行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





  • 相关阅读:
    LeetCode 39. Combination Sum
    LeetCode 37. Sudoku Solver
    LeetCode 36. Valid Sudoku
    LeetCode 34. Search for a Range
    LeetCode 33. Search in Rotated Sorted Array
    VS2010出现灾难性错误的解决办法
    双系统下利用MbrFix.exe卸载LINUX系统
    VS 与 SQLite数据库 连接
    人月神话阅读笔记2
    关于疫情数据分析web开发2-网页爬取实现
  • 原文地址:https://www.cnblogs.com/skyhuangdan/p/5485039.html
Copyright © 2011-2022 走看看