From 5b738f9e223d9a37b662cc4c7c3b29970f023ec2 Mon Sep 17 00:00:00 2001 From: Johannes Obermayr Date: Wed, 15 Jun 2016 20:55:39 +0200 Subject: [PATCH] Improve NETGEN detection and support V6. --- cMake/FindNETGEN.cmake | 53 +++++++++++++------ src/3rdParty/salomesmesh/CMakeLists.txt | 2 +- .../src/NETGENPlugin/NETGENPlugin_Mesher.cpp | 44 ++++++++++----- .../NETGENPlugin_NETGEN_2D_ONLY.cpp | 6 ++- .../NETGENPlugin/NETGENPlugin_NETGEN_3D.cpp | 6 +-- 5 files changed, 77 insertions(+), 34 deletions(-) diff --git a/cMake/FindNETGEN.cmake b/cMake/FindNETGEN.cmake index 8fd7609d9da3..877a4b73caca 100644 --- a/cMake/FindNETGEN.cmake +++ b/cMake/FindNETGEN.cmake @@ -17,8 +17,6 @@ SET(NETGEN_DEFINITIONS -DNO_PARALLEL_THREADS -DOCCGEOMETRY) IF(DEFINED MACPORTS_PREFIX OR DEFINED HOMEBREW_PREFIX) # We haven't supported Netgen prior to 5.3.1 on MacOS, and the current # plan is for the next Netgen version to be 6.1 (currently unreleased). - LIST( APPEND NETGEN_DEFINITIONS -DNETGEN_V5 ) - IF(DEFINED HOMEBREW_PREFIX) EXEC_PROGRAM(brew ARGS --prefix nglib OUTPUT_VARIABLE NGLIB_PREFIX) ELSE(DEFINED HOMEBREW_PREFIX) @@ -39,8 +37,8 @@ IF(DEFINED MACPORTS_PREFIX OR DEFINED HOMEBREW_PREFIX) ENDIF(NOT NETGENDATA) ELSE(DEFINED MACPORTS_PREFIX OR DEFINED HOMEBREW_PREFIX) - FIND_PATH(NGLIB_INCLUDE_DIR nglib.h /usr/include) - FIND_LIBRARY(NGLIB_LIBRARIES nglib /usr/lib /usr/local/lib) + FIND_PATH(NGLIB_INCLUDE_DIR NAMES nglib.h PATHS ${NETGEN_INCLUDEDIR} /usr/include) + FIND_LIBRARY(NGLIB_LIBRARIES nglib PATHS ${NETGEN_LIBDIR} /usr/lib /usr/local/lib) IF(NOT NETGENDATA) SET(NETGENDATA /usr/share/netgen/libsrc) @@ -48,17 +46,42 @@ ELSE(DEFINED MACPORTS_PREFIX OR DEFINED HOMEBREW_PREFIX) ENDIF(DEFINED MACPORTS_PREFIX OR DEFINED HOMEBREW_PREFIX) -FIND_PATH(NETGEN_DIR_csg csg.hpp PATHS ${NETGENDATA}/csg) -FIND_PATH(NETGEN_DIR_gen array.hpp PATHS ${NETGENDATA}/general) -FIND_PATH(NETGEN_DIR_geom2d geom2dmesh.hpp PATHS ${NETGENDATA}/geom2d) -FIND_PATH(NETGEN_DIR_gprim gprim.hpp PATHS ${NETGENDATA}/gprim) -FIND_PATH(NETGEN_DIR_la linalg.hpp PATHS ${NETGENDATA}/linalg) -FIND_PATH(NETGEN_DIR_mesh meshing.hpp PATHS ${NETGENDATA}/meshing) -FIND_PATH(NETGEN_DIR_occ occgeom.hpp PATHS ${NETGENDATA}/occ) -FIND_PATH(NETGEN_DIR_stlgeom stlgeom.hpp PATHS ${NETGENDATA}/stlgeom) +FIND_PATH(NETGEN_DIR_include NAMES mydefs.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/include) +FIND_PATH(NETGEN_DIR_csg NAMES csg.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/csg) +FIND_PATH(NETGEN_DIR_gen NAMES array.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/general) +FIND_PATH(NETGEN_DIR_geom2d NAMES geom2dmesh.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/geom2d) +FIND_PATH(NETGEN_DIR_gprim NAMES gprim.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/gprim) +FIND_PATH(NETGEN_DIR_la NAMES linalg.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/linalg) +FIND_PATH(NETGEN_DIR_mesh NAMES meshing.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/meshing) +FIND_PATH(NETGEN_DIR_occ NAMES occgeom.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/occ) +FIND_PATH(NETGEN_DIR_stlgeom NAMES stlgeom.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/stlgeom) + +IF(NOT NGLIB_INCLUDE_DIR AND NOT NETGEN_DIR_include) + MESSAGE(STATUS "Cannot find NETGEN header files.") +ELSE() + file(STRINGS ${NETGEN_DIR_include}/mydefs.hpp NETGEN_VERSION + REGEX "#define PACKAGE_VERSION.*" + ) + string(REGEX MATCH "[0-9]+" NETGEN_VERSION ${NETGEN_VERSION}) +# EXECUTE_PROCESS(COMMAND grep -e ".*define.*PACKAGE_VERSION" ${NETGEN_DIR_include}/mydefs.hpp +# COMMAND sed -r "s:.*PACKAGE_VERSION \"([0-9]*).*:\\1:g" +# OUTPUT_VARIABLE NETGEN_VERSION +# OUTPUT_STRIP_TRAILING_WHITESPACE) +ENDIF() -LIST( APPEND NETGEN_INCLUDE_DIRS +IF(NOT NGLIB_LIBRARIES) + MESSAGE(STATUS "Cannot find NETGEN library.") +ENDIF() + +IF(NGLIB_INCLUDE_DIR AND NGLIB_LIBRARIES) + SET(NETGEN_FOUND TRUE) + SET(NETGEN_INCLUDE_DIRS ${NETGEN_DIR_include} ${NGLIB_INCLUDE_DIR} ${NETGEN_DIR_csg} ${NETGEN_DIR_gen} ${NETGEN_DIR_geom2d} ${NETGEN_DIR_gprim} ${NETGEN_DIR_la} ${NETGEN_DIR_mesh} - ${NETGEN_DIR_occ} ${NETGEN_DIR_stlgeom} ) - + ${NETGEN_DIR_occ} ${NETGEN_DIR_stlgeom}) + LIST(REMOVE_DUPLICATES NETGEN_INCLUDE_DIRS) + MESSAGE(STATUS "Found NETGEN version ${NETGEN_VERSION}") + LIST(APPEND NETGEN_DEFINITIONS -DNETGEN_VERSION=${NETGEN_VERSION}) +ELSE() + SET(NETGEN_FOUND FALSE) +ENDIF() diff --git a/src/3rdParty/salomesmesh/CMakeLists.txt b/src/3rdParty/salomesmesh/CMakeLists.txt index d3a77d024696..6c2dce7f599e 100644 --- a/src/3rdParty/salomesmesh/CMakeLists.txt +++ b/src/3rdParty/salomesmesh/CMakeLists.txt @@ -373,7 +373,7 @@ TARGET_LINK_LIBRARIES(NETGENPlugin SMDS SMESHDS SMESH StdMeshers ${SMESH_LIBS} ) SET_BIN_DIR(NETGENPlugin NETGENPlugin) if(WIN32) - set_target_properties(NETGENPlugin PROPERTIES COMPILE_FLAGS "-DNETGENPLUGIN_EXPORTS -DNO_PARALLEL_THREADS -DOCCGEOMETRY -DNETGEN_V5") + set_target_properties(NETGENPlugin PROPERTIES COMPILE_FLAGS "-DNETGENPLUGIN_EXPORTS -DNO_PARALLEL_THREADS -DOCCGEOMETRY -DNETGEN_VERSION=${NETGEN_VERSION}") endif(WIN32) endif (BUILD_FEM_NETGEN) diff --git a/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_Mesher.cpp b/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_Mesher.cpp index ad267b31bc4a..b33ca154b1d0 100644 --- a/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_Mesher.cpp +++ b/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_Mesher.cpp @@ -81,7 +81,9 @@ namespace nglib { #include //#include namespace netgen { -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 5 + DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, shared_ptr&, MeshingParameters&, int, int); +#elif NETGEN_VERSION == 5 DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, MeshingParameters&, int, int); #else DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, int, int, char*); @@ -2491,7 +2493,7 @@ bool NETGENPlugin_Mesher::Compute() occgeo.face_maxh = mparams.maxh; // Let netgen create _ngMesh and calculate element size on not meshed shapes -#ifndef NETGEN_V5 +#if NETGEN_VERSION < 5 char *optstr = 0; #endif int startWith = netgen::MESHCONST_ANALYSE; @@ -2499,7 +2501,7 @@ bool NETGENPlugin_Mesher::Compute() try { OCC_CATCH_SIGNALS; -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 4 err = netgen::OCCGenerateMesh(occgeo, _ngMesh, mparams, startWith, endWith); #else err = netgen::OCCGenerateMesh(occgeo, _ngMesh, startWith, endWith, optstr); @@ -2587,7 +2589,7 @@ bool NETGENPlugin_Mesher::Compute() //OCCSetLocalMeshSize(intOccgeo, *_ngMesh); it deletes _ngMesh->localH // let netgen create a temporary mesh -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 4 netgen::OCCGenerateMesh(intOccgeo, tmpNgMesh, mparams, startWith, endWith); #else netgen::OCCGenerateMesh(intOccgeo, tmpNgMesh, startWith, endWith, optstr); @@ -2600,7 +2602,7 @@ bool NETGENPlugin_Mesher::Compute() // compute mesh on internal edges startWith = endWith = netgen::MESHCONST_MESHEDGES; -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 4 err = netgen::OCCGenerateMesh(intOccgeo, tmpNgMesh, mparams, startWith, endWith); #else err = netgen::OCCGenerateMesh(intOccgeo, tmpNgMesh, startWith, endWith, optstr); @@ -2619,7 +2621,11 @@ bool NETGENPlugin_Mesher::Compute() FillSMesh( intOccgeo, *tmpNgMesh, initState, *_mesh, tmpNodeVec, comment ); err = ( err || !comment.empty() ); +#if NETGEN_VERSION > 5 + tmpNgMesh.reset(); +#else nglib::Ng_DeleteMesh((nglib::Ng_Mesh*)tmpNgMesh); +#endif } // Fill _ngMesh with nodes and segments of computed submeshes @@ -2637,7 +2643,7 @@ bool NETGENPlugin_Mesher::Compute() try { OCC_CATCH_SIGNALS; -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 4 err = netgen::OCCGenerateMesh(occgeo, _ngMesh, mparams, startWith, endWith); #else err = netgen::OCCGenerateMesh(occgeo, _ngMesh, startWith, endWith, optstr); @@ -2747,7 +2753,7 @@ bool NETGENPlugin_Mesher::Compute() try { OCC_CATCH_SIGNALS; -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 4 err = netgen::OCCGenerateMesh(occgeo, _ngMesh, mparams, startWith, endWith); #else err = netgen::OCCGenerateMesh(occgeo, _ngMesh, startWith, endWith, optstr); @@ -2826,7 +2832,7 @@ bool NETGENPlugin_Mesher::Compute() } _ngMesh->SetGlobalH (mparams.maxh); mparams.grading = 0.4; -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 4 _ngMesh->CalcLocalH(mparams.grading); #else _ngMesh->CalcLocalH(); @@ -2849,7 +2855,7 @@ bool NETGENPlugin_Mesher::Compute() try { OCC_CATCH_SIGNALS; -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 4 err = netgen::OCCGenerateMesh(occgeo, _ngMesh, mparams, startWith, endWith); #else err = netgen::OCCGenerateMesh(occgeo, _ngMesh, startWith, endWith, optstr); @@ -2881,7 +2887,7 @@ bool NETGENPlugin_Mesher::Compute() try { OCC_CATCH_SIGNALS; -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 4 err = netgen::OCCGenerateMesh(occgeo, _ngMesh, mparams, startWith, endWith); #else err = netgen::OCCGenerateMesh(occgeo, _ngMesh, startWith, endWith, optstr); @@ -3093,13 +3099,17 @@ bool NETGENPlugin_Mesher::Evaluate(MapShapeNbElems& aResMap) // let netgen create _ngMesh and calculate element size on not meshed shapes NETGENPlugin_NetgenLibWrapper ngLib; +#if NETGEN_VERSION > 5 + shared_ptr ngMesh = NULL; +#else netgen::Mesh *ngMesh = NULL; -#ifndef NETGEN_V5 +#endif +#if NETGEN_VERSION < 5 char *optstr = 0; #endif int startWith = netgen::MESHCONST_ANALYSE; int endWith = netgen::MESHCONST_MESHEDGES; -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 4 int err = netgen::OCCGenerateMesh(occgeo, ngMesh, mparams, startWith, endWith); #else int err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr); @@ -3569,7 +3579,7 @@ void NETGENPlugin_ngMeshInfo::transferLocalH( netgen::Mesh* fromMesh, { if ( !fromMesh->LocalHFunctionGenerated() ) return; if ( !toMesh->LocalHFunctionGenerated() ) -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 4 toMesh->CalcLocalH(netgen::mparam.grading); #else toMesh->CalcLocalH(); @@ -3978,7 +3988,11 @@ NETGENPlugin_NetgenLibWrapper::NETGENPlugin_NetgenLibWrapper() NETGENPlugin_NetgenLibWrapper::~NETGENPlugin_NetgenLibWrapper() { +#if NETGEN_VERSION > 5 + _ngMesh.reset(); +#else Ng_DeleteMesh( _ngMesh ); +#endif Ng_Exit(); NETGENPlugin_Mesher::RemoveTmpFiles(); if ( _coutBuffer ) @@ -3998,8 +4012,12 @@ NETGENPlugin_NetgenLibWrapper::~NETGENPlugin_NetgenLibWrapper() void NETGENPlugin_NetgenLibWrapper::setMesh( Ng_Mesh* mesh ) { if ( _ngMesh ) +#if NETGEN_VERSION > 5 + _ngMesh.reset(mesh); +#else Ng_DeleteMesh( _ngMesh ); _ngMesh = mesh; +#endif } //================================================================================ diff --git a/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cpp b/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cpp index d3aeca1ee657..9b6beec1e34a 100644 --- a/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cpp +++ b/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cpp @@ -64,7 +64,9 @@ namespace nglib { #include //#include namespace netgen { -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 5 + DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, shared_ptr&, MeshingParameters&, int, int); +#elif NETGEN_VERSION == 5 DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, MeshingParameters&, int, int); #else DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, int, int, char*); @@ -472,7 +474,7 @@ bool NETGENPlugin_NETGEN_2D_ONLY::Compute(SMESH_Mesh& aMesh, try { OCC_CATCH_SIGNALS; -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 4 err = netgen::OCCGenerateMesh(occgeom, ngMesh, netgen::mparam, startWith, endWith); #else char *optstr = 0; diff --git a/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cpp b/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cpp index 9f91d8c1204d..d4600a1299e6 100644 --- a/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cpp +++ b/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cpp @@ -75,7 +75,7 @@ namespace nglib { #include } namespace netgen { -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 4 DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, MeshingParameters&, int, int); #else DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, int, int, char*); @@ -428,7 +428,7 @@ bool NETGENPlugin_NETGEN_3D::compute(SMESH_Mesh& aMesh, netgen::Mesh* ngMesh = (netgen::Mesh*)Netgen_mesh; int Netgen_NbOfNodes = Ng_GetNP(Netgen_mesh); -#ifndef NETGEN_V5 +#if NETGEN_VERSION < 5 char *optstr = 0; #endif int startWith = netgen::MESHCONST_MESHVOLUME; @@ -470,7 +470,7 @@ bool NETGENPlugin_NETGEN_3D::compute(SMESH_Mesh& aMesh, { OCC_CATCH_SIGNALS; -#ifdef NETGEN_V5 +#if NETGEN_VERSION > 4 ngMesh->CalcLocalH(netgen::mparam.grading); err = netgen::OCCGenerateMesh(occgeo, ngMesh, netgen::mparam, startWith, endWith); #else