Compile_Netgen_WITH_OpenCascade


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容