From 66387458a718babaa5f81842f1f6cb7bd835af6f Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 10 Nov 2013 14:26:30 +0100 Subject: [PATCH] + fixes #0001081 --- CMakeLists.txt | 6 +++ cMake/FindNETGEN.cmake | 36 ++++++++++++++++++ src/3rdParty/salomesmesh/CMakeLists.txt | 21 +++++++--- .../src/NETGENPlugin/NETGENPlugin_Mesher.cpp | 38 +++++++++++++++---- .../NETGENPlugin_NETGEN_2D_ONLY.cpp | 14 +++++-- .../NETGENPlugin/NETGENPlugin_NETGEN_3D.cpp | 4 ++ src/Mod/MeshPart/App/Mesher.cpp | 4 +- 7 files changed, 103 insertions(+), 20 deletions(-) create mode 100644 cMake/FindNETGEN.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 11c9b432b..3354aa205 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -305,6 +305,12 @@ MARK_AS_ADVANCED(FORCE FREECAD_LIBPACK_CHECKFILE6X FREECAD_LIBPACK_CHECKFILE7X) #IF(NOT SMESH_FOUND) # MESSAGE("Salome SMESH was not found!") #ENDIF(NOT SMESH_FOUND) + +# -------------------------------- Netgen -------------------------------- + + if (FREECAD_BUILD_FEM_NETGEN) + find_package(NETGEN) + endif(FREECAD_BUILD_FEM_NETGEN) # -------------------------------- OpenCV -------------------------------- diff --git a/cMake/FindNETGEN.cmake b/cMake/FindNETGEN.cmake new file mode 100644 index 000000000..d993fbfad --- /dev/null +++ b/cMake/FindNETGEN.cmake @@ -0,0 +1,36 @@ +# Try to find nglib/netgen +# Once done this will define +# +# NGLIB_INCLUDE_DIR - where the nglib include directory can be found +# NGLIB_LIBRARIES - Link this to use nglib +# NETGEN_INCLUDE_DIRS - where the netgen include directories can be found +# +# See also: http://git.salome-platform.org/gitweb/?p=NETGENPLUGIN_SRC.git;a=summary + +# nglib +FIND_PATH(NGLIB_INCLUDE_DIR nglib.h /usr/include) +FIND_LIBRARY(NGLIB_LIBRARIES nglib /usr/lib /usr/local/lib) + +# netgen headers +SET(NETGEN_INCLUDE_DIRS) +SET(NETGEN_INCLUDE_DIRS ${NETGEN_INCLUDE_DIRS} -DNO_PARALLEL_THREADS -DOCCGEOMETRY) + +SET(NETGENDATA /usr/share/netgen/libsrc) +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) + +SET(NETGEN_INCLUDE_DIRS ${NETGEN_INCLUDE_DIRS} ${NETGEN_DIR_csg}) +SET(NETGEN_INCLUDE_DIRS ${NETGEN_INCLUDE_DIRS} ${NETGEN_DIR_gen}) +SET(NETGEN_INCLUDE_DIRS ${NETGEN_INCLUDE_DIRS} ${NETGEN_DIR_geom2d}) +SET(NETGEN_INCLUDE_DIRS ${NETGEN_INCLUDE_DIRS} ${NETGEN_DIR_gprim}) +SET(NETGEN_INCLUDE_DIRS ${NETGEN_INCLUDE_DIRS} ${NETGEN_DIR_la}) +SET(NETGEN_INCLUDE_DIRS ${NETGEN_INCLUDE_DIRS} ${NETGEN_DIR_mesh}) +SET(NETGEN_INCLUDE_DIRS ${NETGEN_INCLUDE_DIRS} ${NETGEN_DIR_occ}) +SET(NETGEN_INCLUDE_DIRS ${NETGEN_INCLUDE_DIRS} ${NETGEN_DIR_stlgeom}) + diff --git a/src/3rdParty/salomesmesh/CMakeLists.txt b/src/3rdParty/salomesmesh/CMakeLists.txt index d0c9330a2..b2db05de8 100644 --- a/src/3rdParty/salomesmesh/CMakeLists.txt +++ b/src/3rdParty/salomesmesh/CMakeLists.txt @@ -15,6 +15,7 @@ include_directories( ${Boost_INCLUDE_DIRS} ${OCC_INCLUDE_DIR} ${NGLIB_INCLUDE_DIR} + ${NETGEN_INCLUDE_DIRS} src/SMDS src/Driver src/DriverUNV @@ -55,10 +56,18 @@ if(MSVC) endif(FREECAD_BUILD_FEM_NETGEN) else(MSVC) - set(SMESH_LIBS - ${OCC_LIBRARIES} - ${OCC_OCAF_LIBRARIES} - ) + if(FREECAD_BUILD_FEM_NETGEN) + set(SMESH_LIBS + ${NGLIB_LIBRARIES} + ${OCC_LIBRARIES} + ${OCC_OCAF_LIBRARIES} + ) + else(FREECAD_BUILD_FEM_NETGEN) + set(SMESH_LIBS + ${OCC_LIBRARIES} + ${OCC_OCAF_LIBRARIES} + ) + endif(FREECAD_BUILD_FEM_NETGEN) endif(MSVC) @@ -442,13 +451,13 @@ ADD_LIBRARY(NETGENPlugin SHARED ${NETGENPlugin_source_files}) TARGET_LINK_LIBRARIES(NETGENPlugin SMDS SMESHDS SMESH StdMeshers ${SMESH_LIBS} ) if(MSVC) - set_target_properties(NETGENPlugin PROPERTIES COMPILE_FLAGS "-DNETGENPLUGIN_EXPORTS -DNO_PARALLEL_THREADS -DOCCGEOMETRY") + set_target_properties(NETGENPlugin PROPERTIES COMPILE_FLAGS "-DNETGENPLUGIN_EXPORTS -DNO_PARALLEL_THREADS -DOCCGEOMETRY -DNETGEN_V5") set_target_properties(NETGENPlugin PROPERTIES DEBUG_OUTPUT_NAME "NETGENPlugind") set_target_properties(NETGENPlugin PROPERTIES OUTPUT_NAME "NETGENPlugin") set_target_properties(NETGENPlugin PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set_target_properties(NETGENPlugin PROPERTIES PREFIX "../") elseif(MINGW) - set_target_properties(NETGENPlugin PROPERTIES COMPILE_FLAGS "-DNETGENPLUGIN_EXPORTS -DNO_PARALLEL_THREADS -DOCCGEOMETRY") + set_target_properties(NETGENPlugin PROPERTIES COMPILE_FLAGS "-DNETGENPLUGIN_EXPORTS -DNO_PARALLEL_THREADS -DOCCGEOMETRY -DNETGEN_V5") set_target_properties(NETGENPlugin PROPERTIES OUTPUT_NAME "NETGENPlugin") set_target_properties(NETGENPlugin PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set_target_properties(NETGENPlugin PROPERTIES PREFIX "") diff --git a/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_Mesher.cpp b/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_Mesher.cpp index 0eabc6831..1dd087129 100644 --- a/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_Mesher.cpp +++ b/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_Mesher.cpp @@ -62,8 +62,12 @@ namespace nglib { #include //#include namespace netgen { - __declspec(dllimport) extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, int, int, char*); - __declspec(dllimport) extern MeshingParameters mparam; +#ifdef NETGEN_V5 + DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, MeshingParameters&, int, int); + DLL_HEADER extern MeshingParameters mparam; +#else + DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, int, int, char*); +#endif } using namespace std; @@ -203,7 +207,7 @@ void NETGENPlugin_Mesher::PrepareOCCgeometry(netgen::OCCGeometry& occgeo, #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 OCC_CATCH_SIGNALS; #endif - BRepMesh_IncrementalMesh::BRepMesh_IncrementalMesh (shape, 0.01, true); + BRepMesh_IncrementalMesh e(shape, 0.01, true); } catch (Standard_Failure) { } Bnd_Box bb; @@ -580,11 +584,16 @@ bool NETGENPlugin_Mesher::Compute() } } // let netgen create ngMesh and calculate element size on not meshed shapes +#ifndef NETGEN_V5 char *optstr = 0; +#endif int startWith = netgen::MESHCONST_ANALYSE; int endWith = netgen::MESHCONST_ANALYSE; - //err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr); +#ifdef NETGEN_V5 err = netgen::OCCGenerateMesh(occgeo, ngMesh,mparams, startWith, endWith); +#else + err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr); +#endif if (err) comment << "Error in netgen::OCCGenerateMesh() at MESHCONST_ANALYSE step"; // fill ngMesh with nodes and elements of computed submeshes @@ -597,8 +606,11 @@ bool NETGENPlugin_Mesher::Compute() if (!err) { startWith = endWith = netgen::MESHCONST_MESHEDGES; - //err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr); +#ifdef NETGEN_V5 err = netgen::OCCGenerateMesh(occgeo, ngMesh,mparams, startWith, endWith); +#else + err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr); +#endif if (err) comment << "Error in netgen::OCCGenerateMesh() at 1D mesh generation"; } // --------------------- @@ -633,8 +645,11 @@ bool NETGENPlugin_Mesher::Compute() // let netgen compute 2D mesh startWith = netgen::MESHCONST_MESHSURFACE; endWith = _optimize ? netgen::MESHCONST_OPTSURFACE : netgen::MESHCONST_MESHSURFACE; - //err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr); +#ifdef NETGEN_V5 err = netgen::OCCGenerateMesh(occgeo, ngMesh,mparams, startWith, endWith); +#else + err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr); +#endif if (err) comment << "Error in netgen::OCCGenerateMesh() at surface mesh generation"; } // --------------------- @@ -669,13 +684,20 @@ bool NETGENPlugin_Mesher::Compute() // ngMesh->SetMaxHDomain (maxhdom); ngMesh->SetGlobalH (mparams.maxh); mparams.grading = 0.4; - ngMesh->CalcLocalH(0.4); +#ifdef NETGEN_V5 + ngMesh->CalcLocalH(mparams.grading); +#else + ngMesh->CalcLocalH(); +#endif } // let netgen compute 3D mesh startWith = netgen::MESHCONST_MESHVOLUME; endWith = _optimize ? netgen::MESHCONST_OPTVOLUME : netgen::MESHCONST_MESHVOLUME; - //err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr); +#ifdef NETGEN_V5 err = netgen::OCCGenerateMesh(occgeo, ngMesh,mparams, startWith, endWith); +#else + err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr); +#endif if (err) comment << "Error in netgen::OCCGenerateMesh()"; } if (!err && mparams.secondorder > 0) 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 05a2e4610..31895a3d2 100644 --- a/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cpp +++ b/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cpp @@ -58,8 +58,12 @@ namespace nglib { #include //#include namespace netgen { - //__declspec(dllimport) extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, int, int, char*); - __declspec(dllimport) extern MeshingParameters mparam; +#ifdef NETGEN_V5 + DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, MeshingParameters&, int, int); +#else + DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, int, int, char*); +#endif + DLL_HEADER extern MeshingParameters mparam; } using namespace std; @@ -373,9 +377,11 @@ bool NETGENPlugin_NETGEN_2D_ONLY::Compute(SMESH_Mesh& aMesh, #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 OCC_CATCH_SIGNALS; #endif - //err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr); - // jriegel: change, cause no such methode in nglib +#ifdef NETGEN_V5 err = netgen::OCCGenerateMesh(occgeo, ngMesh,netgen::mparam, startWith, endWith); +#else + err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr); +#endif } catch (Standard_Failure& ex) { string comment = ex.DynamicType()->Name(); diff --git a/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cpp b/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cpp index 82df87da7..de80ede30 100644 --- a/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cpp +++ b/src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cpp @@ -351,7 +351,9 @@ bool NETGENPlugin_NETGEN_3D::Compute(SMESH_Mesh& aMesh, Ng_Meshing_Parameters Netgen_param; +#ifdef NETGEN_V5 Netgen_param.second_order = Netgen_param2ndOrder; +#endif Netgen_param.fineness = Netgen_paramFine; Netgen_param.maxh = Netgen_paramSize; @@ -562,7 +564,9 @@ bool NETGENPlugin_NETGEN_3D::Compute(SMESH_Mesh& aMesh, Ng_Meshing_Parameters Netgen_param; +#ifdef NETGEN_V5 Netgen_param.second_order = Netgen_param2ndOrder; +#endif Netgen_param.fineness = Netgen_paramFine; Netgen_param.maxh = Netgen_paramSize; diff --git a/src/Mod/MeshPart/App/Mesher.cpp b/src/Mod/MeshPart/App/Mesher.cpp index cdfb7684e..5a7c47f19 100644 --- a/src/Mod/MeshPart/App/Mesher.cpp +++ b/src/Mod/MeshPart/App/Mesher.cpp @@ -46,11 +46,11 @@ #include #include -#if defined(_MSC_VER) +#if defined(HAVE_NETGEN) #include #include #include -#endif +#endif // HAVE_NETGEN #endif // HAVE_SMESH using namespace MeshPart;