NETGEN_INCLUDES=""
NETGEN_LIBS_DIR=""
+NETGEN_LIBS=""
+NETGEN_NEW=no
Netgen_ok=no
if test "x$NETGEN_HOME" != "x"; then
- echo
- echo
- echo -------------------------------------------------
+ if test -f ${NETGEN_HOME}/lib/libnglib.so ; then
+ NETGEN_NEW=yes
+ fi
+
+ echo ----------------------------------------------------------
+ echo ----------------------------------------------------------
echo You are about to choose to use somehow the
echo Netgen Library to generate Tetrahedric mesh.
- echo
- echo WARNING
echo ----------------------------------------------------------
echo ----------------------------------------------------------
echo You are strongly advised to consult the file
- echo NETGENPLUGIN_SRC/src/NETGEN/ReadMeForNgUsers, particularly about
- echo assumptions made on the installation of the Netgen
+ echo NETGENPLUGIN_SRC/src/NETGEN/ReadMeForNgUsers, particularly
+ echo about assumptions made on the installation of the Netgen
echo application and libraries.
- echo Ask your system administrator for those details.
echo ----------------------------------------------------------
echo ----------------------------------------------------------
- echo
- echo
-
-
NETGEN_INCLUDES="-I${NETGEN_HOME}/include"
-
+
+ if test "$NETGEN_NEW" = "yes" ; then
+ NETGEN_INCLUDES="${NETGEN_INCLUDES} -DNETGEN_NEW -I${NETGEN_HOME}/share/salome/include"
+ fi
+
# check ${NETGEN_HOME}/lib/LINUX directory for libraries
if test -f ${NETGEN_HOME}/lib/LINUX/libcsg.a ; then
NETGEN_LIBS_DIR="${NETGEN_HOME}/lib/LINUX"
AC_CHECK_HEADER(nglib.h,Netgen_ok=yes,Netgen_ok=no)
if test "x$Netgen_ok" == "xyes"; then
+ if test "$NETGEN_NEW" = "no" ; then
+
AC_MSG_CHECKING(for Netgen libraries)
LDFLAGS_old="$LDFLAGS"
])
Netgen_ok="$salome_cv_netgen_lib"
+ else
+
+ LDFLAGS_old="$LDFLAGS"
+ LDFLAGS="-L${NETGEN_LIBS_DIR} -lnglib $CAS_LDPATH -lTKBRep -lTKShHealing -lTKSTEP -lTKXSBase -lTKIGES -lTKSTL -lTKTopAlgo $LDFLAGS"
+
+ AC_MSG_CHECKING(for official Netgen libraries)
+ AC_CACHE_VAL(salome_cv_netgen_lib,[
+ AC_TRY_LINK([
+ #include <iostream>
+ #include <fstream>
+ namespace nglib {
+ #include "nglib.h"
+ }
+ ],[
+ nglib::Ng_Init();
+ nglib::Ng_Exit();
+ ],
+ [eval "salome_cv_netgen_lib=yes"],
+ [eval "salome_cv_netgen_lib=no"])
+ ])
+ Netgen_ok="$salome_cv_netgen_lib"
+
+ if test "$Netgen_ok" = "yes" ; then
+ AC_MSG_RESULT(yes)
+ AC_MSG_CHECKING(for occ support in Netgen libraries)
+ AC_CACHE_VAL(salome_cv_netgen_occ_lib,[
+ AC_TRY_LINK([
+ #include <iostream>
+ #include <fstream>
+ #define OCCGEOMETRY
+ namespace nglib {
+ #include "nglib.h"
+ }
+ ],[
+ nglib::Ng_Init();
+ nglib::Ng_OCC_Geometry * ng_occ_geom = nglib::Ng_OCC_NewGeometry();
+ nglib::Ng_Exit();
+ ],
+ [eval "salome_cv_netgen_occ_lib=yes"],
+ [eval "salome_cv_netgen_occ_lib=no"])
+ ])
+ Netgen_ok="$salome_cv_netgen_occ_lib"
+ fi
+
+ if test "$Netgen_ok" = "yes" ; then
+ AC_MSG_RESULT(yes)
+ AC_MSG_CHECKING(for salome patch in Netgen installation)
+ AC_CACHE_VAL(salome_cv_netgen_salome_patch_lib,[
+ AC_TRY_LINK([
+ #include <iostream>
+ #include <fstream>
+ #define OCCGEOMETRY
+ namespace nglib {
+ #include "nglib.h"
+ }
+ #include <occgeom.hpp>
+ ],[
+ nglib::Ng_Init();
+ netgen::OCCGeometry occgeo;
+ nglib::Ng_Exit();
+ ],
+ [eval "salome_cv_netgen_salome_patch_lib=yes"],
+ [eval "salome_cv_netgen_salome_patch_lib=no"])
+ ])
+ Netgen_ok="$salome_cv_netgen_salome_patch_lib"
+ fi
+
+ if test "x$Netgen_ok" == xno ; then
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR(Netgen is not properly installed)
+ fi
+
+ NETGEN_LIBS="-L${NETGEN_LIBS_DIR} -lnglib"
+
+ fi
LDFLAGS="$LDFLAGS_old"
fi
AC_SUBST(NETGEN_INCLUDES)
AC_SUBST(NETGEN_LIBS_DIR)
+AC_SUBST(NETGEN_LIBS)
+AM_CONDITIONAL(NETGEN_NEW, [test x"$NETGEN_NEW" = x"yes"])
AC_LANG_RESTORE
#
include $(top_srcdir)/adm_local/unix/make_common_starter.am
-SUBDIRS = NETGEN NETGENPlugin
+SUBDIRS =
+if ! NETGEN_NEW
+ SUBDIRS += NETGEN
+endif
+SUBDIRS += NETGENPlugin
if NETGENPLUGIN_ENABLE_GUI
SUBDIRS += GUI
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
+# Notes for Netgen >= 4.9
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
+
+Netgen can be find at http://www.hpfem.jku.at/netgen/
+
+1. How to build Netgen for Netgen Plugin
+------------------------------
+
+1.1. Download Netgen archive (here netgen-4.9.11.tar.gz) and unpack it
+
+1.2. Configure the netgen compilation. The "good" options are
+ ../netgen-4.9.11/configure \
+ --prefix=THE_INSTALLATION_PATH \
+ --enable-occ --enable-nglib --with-occ=${CASROOT} \
+ CXXFLAGS="-DOCCGEOMETRY -I${CASROOT}/inc -DHAVE_IOSTREAM -DHAVE_LIMITS -DHAVE_LIMITS_H -DHAVE_IOMANIP -I${TOGL_HOME}/include" \
+ LDFLAGS="-L${TOGL_HOME}/lib/Togl1.7"
+
+1.3. Compile the netgen product
+ make then make install
+
+1.4. Patch the installation directory to copy include files
+ needed by NETGEN Plugin. Use the script
+ NETGENPLUGIN_SRC/src/NETGEN/netgen_copy_include_for_salome
+ to achieve that. The first argument is the directory containing
+ the Netgen sources. The second argument is THE_INSTALLATION_PATH
+
+Erwan ADAM
+erwan.adam@cea.fr
+
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
+# Notes for Netgen 4.5
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
+
The Netgen 4.5 from the web location : http://www.hpfem.jku.at/netgen/
(CVS access) is used in the SMESH Module of Salome3 distribution.
Michael SAZONOV
m-sazonov@opencascade.com
+
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
--- /dev/null
+#!/bin/sh
+
+src_dir=$1
+install_dir=$2
+
+if ! test -d $src_dir/libsrc ; then
+ echo "No dir $src_dir/libsrc ... Bye"
+ exit 1
+fi
+if ! test -d $install_dir/share/netgen ; then
+ echo "No dir $install_dir/share/netgen ... Bye"
+ exit 1
+fi
+
+dest_dir=$install_dir/share/salome/include
+mkdir -p $dest_dir > /dev/null 2>&1
+cp -af $src_dir/libsrc/occ/*.hpp $dest_dir
+cp -af $src_dir/libsrc/meshing/*.hpp $dest_dir
+cp -af $src_dir/libsrc/general/*.hpp $dest_dir
+cp -af $src_dir/libsrc/gprim/*.hpp $dest_dir
+cp -af $src_dir/libsrc/linalg/*.hpp $dest_dir
+cp -af $src_dir/libsrc/include/mystdlib.h $dest_dir
+cp -af $src_dir/libsrc/include/mydefs.hpp $dest_dir
$(BOOST_CPPFLAGS) \
-I$(top_builddir)/idl
-libNETGENEngine_la_LDFLAGS = \
- ../NETGEN/libNETGEN.la \
+if ! NETGEN_NEW
+libNETGENEngine_la_LDFLAGS = ../NETGEN/libNETGEN.la
+else
+libNETGENEngine_la_LDFLAGS = $(NETGEN_LIBS)
+endif
+
+libNETGENEngine_la_LDFLAGS += \
../../idl/libSalomeIDLNETGENPLUGIN.la \
$(CAS_LDPATH) -lTKernel -lTKBRep -lTKShHealing -lTKSTEP -lTKXSBase -lTKIGES -lTKMesh -lTKSTL -lTKG3d -lTKTopAlgo -lTKG2d -lTKBool -lTKGeomAlgo -lTKOffset -lTKGeomBase -lTKBO \
$(SMESH_LDFLAGS) -lSMESHimpl -lSMESHEngine -lStdMeshersEngine -lStdMeshers -lSMESHDS -lSMDS -lSMESHControls \
}
occgeo.facemeshstatus.SetSize (occgeo.fmap.Extent());
occgeo.facemeshstatus = 0;
+#ifdef NETGEN_NEW
+ occgeo.face_maxh.SetSize(occgeo.fmap.Extent());
+ occgeo.face_maxh = netgen::mparam.maxh;
+#endif
}
netgen::Segment seg;
// ng node ids
+#ifdef NETGEN_NEW
+ seg.pnums[0] = prevNgId;
+ seg.pnums[1] = prevNgId = ngNodeId( p2.node, ngMesh, nodeNgIdMap );
+#else
seg.p1 = prevNgId;
seg.p2 = prevNgId = ngNodeId( p2.node, ngMesh, nodeNgIdMap );
+#endif
// node param on curve
seg.epgeominfo[ 0 ].dist = p1.param;
seg.epgeominfo[ 1 ].dist = p2.param;
seg.epgeominfo[ 1 ].v = otherSeamParam;
swap (seg.epgeominfo[0].u, seg.epgeominfo[1].u);
}
+#ifdef NETGEN_NEW
+ swap (seg.pnums[0], seg.pnums[1]);
+#else
swap (seg.p1, seg.p2);
+#endif
swap (seg.epgeominfo[0].dist, seg.epgeominfo[1].dist);
seg.edgenr = ngMesh.GetNSeg() + 1; // segment id
ngMesh.AddSegment (seg);
newNodeOnVertex = true;
}
if (!node)
+#ifdef NETGEN_NEW
+ node = meshDS->AddNode(ngPoint(0), ngPoint(1), ngPoint(2));
+#else
node = meshDS->AddNode(ngPoint.X(), ngPoint.Y(), ngPoint.Z());
+#endif
if (!node)
{
MESSAGE("Cannot create a mesh node");
for (i = nbInitSeg+1; i <= nbSeg/* && isOK*/; ++i )
{
const netgen::Segment& seg = ngMesh->LineSegment(i);
+#ifdef NETGEN_NEW
+ Link link(seg.pnums[0], seg.pnums[1]);
+#else
Link link(seg.p1, seg.p2);
+#endif
if (linkMap.Contains(link))
continue;
linkMap.Add(link);
TopoDS_Edge aEdge;
+#ifdef NETGEN_NEW
+ int pinds[3] = { seg.pnums[0], seg.pnums[1], seg.pnums[2] };
+#else
int pinds[3] = { seg.p1, seg.p2, seg.pmid };
+#endif
int nbp = 0;
double param2 = 0;
for (int j=0; j < 3; ++j)
{
removeFile("test.out");
removeFile("problemfaces");
+ removeFile("occmesh.rep");
}
// Add the segment
Segment seg;
+#ifdef NETGEN_NEW
+ seg.pnums[0] = ngMesh.GetNP(); // ng node id
+ seg.pnums[1] = seg.pnums[0] + 1; // ng node id
+#else
seg.p1 = ngMesh.GetNP(); // ng node id
seg.p2 = seg.p1 + 1; // ng node id
+#endif
seg.edgenr = ngMesh.GetNSeg() + 1;// segment id
seg.si = faceID; // = geom.fmap.FindIndex (face);
// 20526: [CEA] Disk meshing fails
if (reverse)
{
+#ifdef NETGEN_NEW
+ swap (seg.pnums[0], seg.pnums[1]);
+#else
swap (seg.p1, seg.p2);
+#endif
swap (seg.epgeominfo[0].dist, seg.epgeominfo[1].dist);
swap (seg.epgeominfo[0].u, seg.epgeominfo[1].u);
swap (seg.epgeominfo[0].v, seg.epgeominfo[1].v);
// << "\tp1 edge: " << seg.epgeominfo[ 1 ].edgenr << endl;
}
Segment& seg = ngMesh.LineSegment( ngMesh.GetNSeg() );
+#ifdef NETGEN_NEW
+ seg.pnums[1] = firstPointID;
+#else
seg.p2 = firstPointID;
+#endif
}
ngMesh.CalcSurfacesOfNode();
for ( int i = nbInputNodes + 1; i <= nbNodes; ++i )
{
const MeshPoint& ngPoint = ngMesh->Point(i);
+#ifdef NETGEN_NEW
+ SMDS_MeshNode * node = meshDS->AddNode(ngPoint(0), ngPoint(1), ngPoint(2));
+#else
SMDS_MeshNode * node = meshDS->AddNode(ngPoint.X(), ngPoint.Y(), ngPoint.Z());
+#endif
nodeVec[ i-1 ] = node;
}