Compile_Netgen_WITH_OpenCascade


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


結(jié)合OCCT編譯Netgen

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

前言

目前大多數(shù)netgen編譯的教程都是without OCCT.

環(huán)境:

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

注: 這里必須預(yù)先已經(jīng)編譯好OCCT6.5.1 本文默認(rèn)讀者已經(jīng)編譯好. 可直接調(diào)用庫文件進行開發(fā).

文件排放結(jié)構(gòu)

文件結(jié)構(gòu)

編譯前準(zhǔn)備工作

修改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

出現(xiàn)問題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行的注釋

接著編譯............

出現(xiàn)問題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調(diào)用不明確

結(jié)合OCCT編譯Netgen9

解決辦法:

將ngp.cpp中的聲明注釋掉!

結(jié)合OCCT編譯Netgen10

問題:

以上包含后出現(xiàn)無法解析的外部符號:

結(jié)合OCCT編譯Netgen8

這是因為occpkg.cpp中調(diào)用了:

static VisualSceneOCCGeometry vsoccgeom;

而以上類卻找不到實現(xiàn)的cpp , 而E:\NetGen\netgen-5.0.0\libsrc\occ\vsocc.cpp就在occ文件夾下.

解決辦法:

項目->添加現(xiàn)有項:

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

發(fā)現(xiàn)項目中竟然沒有x64項目和debug(OCC) 所以只能自己在配置器中自己定義!

注意! 這樣定義只是個名稱而已, 加入OCC關(guān)鍵的體現(xiàn)地方在于宏定義,
即 只要是with OCC就必須要在預(yù)處理器中定義:

_OCC64
Standard_EXPORT=
OCCGEOMETRY

這是非常關(guān)鍵的, 否則就不能稱之為 WITH OCC !!!!

編譯非常順利. 直接完成.

編譯完成后,運行nglib文件夾下的ng_vol.cpp示例程序.如果一切運行正常, 打印出正確的信息. 那么證明一切順利.

注:

備注1

本文中編譯過程中默認(rèn) 讀者知道如何將OCCT的.h文件 .lib文件目錄如何添加到netgen和nglib項目中

備注2

本文默認(rèn), 讀者知道如何在編譯完成之后 配置示例程序.

備注3

如果編譯一切都順利.只是會出現(xiàn)postBuild之類的FAILED錯誤. 這是因為post_Build.bat文件中要求的文件拷貝沒有正確. 如果你真的搞不懂, 那你就自己手動拷貝即可.不用非得讓程序自動拷貝. (其實仔細研究post_Build.bat文件,就知道也就那么回事了.)

參考學(xué)習(xí)

NetGen用戶手冊

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容