From ee0caf79484877b9863cec5c084ecd00abe84da5 Mon Sep 17 00:00:00 2001 From: abd Date: Wed, 18 Apr 2007 15:47:16 +0000 Subject: [PATCH] Merging from V3_2_6pre4 --- configure.in.base | 433 ------------------ src/NETGENPlugin/NETGENPlugin_Mesher.cxx | 99 ++-- src/NETGENPlugin/NETGENPlugin_Mesher.hxx | 7 +- src/NETGENPlugin/NETGENPlugin_NETGEN_2D.cxx | 49 +- src/NETGENPlugin/NETGENPlugin_NETGEN_2D.hxx | 5 - src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.cxx | 49 +- src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.hxx | 5 - src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx | 84 +--- src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx | 5 - 9 files changed, 103 insertions(+), 633 deletions(-) delete mode 100644 configure.in.base diff --git a/configure.in.base b/configure.in.base deleted file mode 100644 index 5a9a665..0000000 --- a/configure.in.base +++ /dev/null @@ -1,433 +0,0 @@ -# -# PLEASE DO NOT MODIFY configure.in FILE -# -# ALL CHANGES WILL BE DISCARDED BY THE NEXT -# build_configure COMMAND -# -# CHANGES MUST BE MADE IN configure.in.base FILE -# -# -# Author : Marc Tajchman (CEA) -# Date : 28/06/2001 -# Modified by : Patrick GOLDBRONN (CEA) -# Modified by : Marc Tajchman (CEA) -# -# Created from configure.in.base -# - -AC_INIT(src) -AC_CONFIG_AUX_DIR(${KERNEL_ROOT_DIR}/salome_adm/unix/config_files) -AC_CANONICAL_HOST - -PACKAGE=salome -AC_SUBST(PACKAGE) - -VERSION=4.0.0 -XVERSION=0x040000 -AC_SUBST(VERSION) -AC_SUBST(XVERSION) - -# set up MODULE_NAME variable for dynamic construction of directories (resources, etc.) -MODULE_NAME=netgenplugin -AC_SUBST(MODULE_NAME) - -dnl -dnl Initialize source and build root directories -dnl - -ROOT_BUILDDIR=`pwd` -ROOT_SRCDIR=`echo $0 | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"` -cd $ROOT_SRCDIR -ROOT_SRCDIR=`pwd` -cd $ROOT_BUILDDIR - -AC_SUBST(ROOT_SRCDIR) -AC_SUBST(ROOT_BUILDDIR) - -echo -echo Source root directory : $ROOT_SRCDIR -echo Build root directory : $ROOT_BUILDDIR -echo -echo - -if test -z "$AR"; then - AC_CHECK_PROGS(AR,ar xar,:,$PATH) -fi -AC_SUBST(AR) - -dnl Export the AR macro so that it will be placed in the libtool file -dnl correctly. -export AR - -echo -echo --------------------------------------------- -echo testing make -echo --------------------------------------------- -echo - -AC_PROG_MAKE_SET -AC_PROG_INSTALL -dnl -dnl libtool macro check for CC, LD, NM, LN_S, RANLIB, STRIP + pour les librairies dynamiques ! - -AC_ENABLE_DEBUG(yes) -AC_DISABLE_PRODUCTION - -echo --------------------------------------------- -echo testing libtool -echo --------------------------------------------- - -dnl first, we set static to no! -dnl if we want it, use --enable-static -AC_ENABLE_STATIC(no) - -AC_LIBTOOL_DLOPEN -AC_PROG_LIBTOOL - -dnl Fix up the INSTALL macro if it s a relative path. We want the -dnl full-path to the binary instead. -case "$INSTALL" in - *install-sh*) - INSTALL='\${KERNEL_ROOT_DIR}'/salome_adm/unix/config_files/install-sh - ;; -esac - -echo -echo --------------------------------------------- -echo testing C/C++ -echo --------------------------------------------- -echo - -cc_ok=no -dnl inutil car libtool -dnl AC_PROG_CC -AC_PROG_CXX -AC_DEPEND_FLAG -# AC_CC_WARNINGS([ansi]) -cc_ok=yes - -dnl Library libdl : -AC_CHECK_LIB(dl,dlopen) - -dnl add library libm : -AC_CHECK_LIB(m,ceil) - -dnl -dnl Well we use sstream which is not in gcc pre-2.95.3 -dnl We must test if it exists. If not, add it in include ! -dnl - -AC_CXX_HAVE_SSTREAM - -echo -echo --------------------------------------------- -echo BOOST Library -echo --------------------------------------------- -echo - -CHECK_BOOST - -dnl -dnl --------------------------------------------- -dnl testing MPICH -dnl --------------------------------------------- -dnl - -CHECK_MPICH - -echo -echo --------------------------------------------- -echo testing LEX \& YACC -echo --------------------------------------------- -echo - -lex_yacc_ok=no -AC_PROG_YACC -AC_PROG_LEX -lex_yacc_ok=yes - -echo -echo --------------------------------------------- -echo testing python -echo --------------------------------------------- -echo - -CHECK_PYTHON - -dnl echo -dnl echo --------------------------------------------- -dnl echo testing java -dnl echo --------------------------------------------- -dnl echo - -dnl CHECK_JAVA - -echo -echo --------------------------------------------- -echo testing swig -echo --------------------------------------------- -echo - -CHECK_SWIG - -echo -echo --------------------------------------------- -echo testing threads -echo --------------------------------------------- -echo - -ENABLE_PTHREADS - -echo -echo --------------------------------------------- -echo testing omniORB -echo --------------------------------------------- -echo - -CHECK_OMNIORB - -dnl echo -dnl echo --------------------------------------------- -dnl echo testing mico -dnl echo --------------------------------------------- -dnl echo - -dnl CHECK_MICO - -echo -echo --------------------------------------------- -echo default ORB : omniORB -echo --------------------------------------------- -echo - -DEFAULT_ORB=omniORB -CHECK_CORBA - -AC_SUBST_FILE(CORBA) -corba=make_$ORB -CORBA=adm_local/unix/$corba - -echo -echo --------------------------------------------- -echo testing openGL -echo --------------------------------------------- -echo - -CHECK_OPENGL - -echo -echo --------------------------------------------- -echo testing QT -echo --------------------------------------------- -echo - -CHECK_QT - -echo -echo --------------------------------------------- -echo testing MSG2QM -echo --------------------------------------------- -echo - -CHECK_MSG2QM - -echo -echo --------------------------------------------- -echo testing VTK -echo --------------------------------------------- -echo - -CHECK_VTK - -echo -echo --------------------------------------------- -echo testing HDF5 -echo --------------------------------------------- -echo - -CHECK_HDF5 - -echo -echo --------------------------------------------- -echo Testing OpenCascade -echo --------------------------------------------- -echo - -CHECK_CAS - -echo -echo --------------------------------------------- -echo Testing html generators -echo --------------------------------------------- -echo - -CHECK_HTML_GENERATORS - -echo -echo --------------------------------------------- -echo Testing GUI -echo --------------------------------------------- -echo - -CHECK_SALOME_GUI - -echo -echo --------------------------------------------- -echo Testing full GUI -echo --------------------------------------------- -echo - -CHECK_CORBA_IN_GUI -if test "x${CORBA_IN_GUI}" != "xyes"; then - echo "failed : For configure NETGENPLUGIN module necessary full GUI !" - exit -fi - -echo -echo --------------------------------------------- -echo Testing Kernel -echo --------------------------------------------- -echo - -CHECK_KERNEL - -echo -echo --------------------------------------------- -echo Testing Geom -echo --------------------------------------------- -echo - -CHECK_GEOM - -# echo -# echo --------------------------------------------- -# echo Testing Med -# echo --------------------------------------------- -# echo -# -# CHECK_MED - -echo -echo --------------------------------------------- -echo Testing Netgen -echo --------------------------------------------- -echo - -CHECK_NETGEN - -echo -echo --------------------------------------------- -echo Testing SMesh -echo --------------------------------------------- -echo - -CHECK_SMESH - -echo -echo --------------------------------------------- -echo Summary -echo --------------------------------------------- -echo - -echo Configure -variables="cc_ok boost_ok lex_yacc_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok vtk_ok hdf5_ok omniORB_ok occ_ok doxygen_ok graphviz_ok Kernel_ok Geom_ok SMesh_ok Netgen_ok" - -for var in $variables -do - printf " %10s : " `echo \$var | sed -e "s,_ok,,"` - eval echo \$$var -done - -echo -echo "Default ORB : $DEFAULT_ORB" -echo - -dnl generals files which could be included in every makefile - -AC_SUBST_FILE(COMMENCE) COMMENCE=adm_local/unix/make_commence -AC_SUBST_FILE(CONCLUDE) CONCLUDE=salome_adm/unix/make_conclude -AC_SUBST_FILE(MODULE) MODULE=salome_adm/unix/make_module - -dnl les dependences -AC_SUBST_FILE(DEPEND) DEPEND=salome_adm/unix/depend - -dnl We don t need to say when we re entering directories if we re using -dnl GNU make becuase make does it for us. -if test "X$GMAKE" = "Xyes"; then - AC_SUBST(SETX) SETX=":" -else - AC_SUBST(SETX) SETX="set -x" -fi - -# make other build directories -for rep in salome_adm adm_local doc bin/salome include/salome lib${LIB_LOCATION_SUFFIX}/salome share/salome/resources/${MODULE_NAME} idl -do -# if test ! -d $rep ; then -# eval mkdir $rep -# fi - $INSTALL -d $rep -done - -echo -echo --------------------------------------------- -echo copying resource files, shell scripts, and -echo xml files -echo --------------------------------------------- -echo - - -dnl copy resources directories - -#for i in `find $ROOT_SRCDIR -name 'resources' -print` -#do -# local_res=`echo $i | sed -e "s,$ROOT_SRCDIR,.,"` -# local_res_dir=`echo $local_res | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"` -# mkdir -p $local_res_dir -# cd $local_res_dir -# ln -fs $i -# echo $local_res -# cd $ROOT_BUILDDIR -#done - -dnl copy shells and utilities contained in the bin directory -dnl excluding .in files (treated in AC-OUTPUT below) and CVS -dnl directory - -#mkdir -p bin/salome -#cd bin/salome -#for i in $ROOT_SRCDIR/bin/* -#do -# local_bin=`echo $i | sed -e "s,$ROOT_SRCDIR,.,"` -# case "$local_bin" in -# *.in | *~) ;; -# ./bin/CVS | ./bin/salome) ;; -# *) /usr/bin/install -C $i .; echo $local_bin ;; -# esac -#done -#cd $ROOT_BUILDDIR - -AC_SUBST_FILE(ENVSCRIPT) ENVSCRIPT=salome_adm/unix/envScript - -dnl copy xml files to the build tree (lib directory) -dnl pourquoi ???? - -#cd lib -#for i in `find $ROOT_SRCDIR -name "*.xml" -print` -#do -# ln -fs $i -# echo `echo $i | sed -e "s,$ROOT_SRCDIR,.,"` -#done -#cd $ROOT_BUILDDIR - - -echo -echo --------------------------------------------- -echo generating Makefiles and configure files -echo --------------------------------------------- -echo - -#AC_OUTPUT_COMMANDS([ \ -# chmod +x ./bin/* \ -#]) - -## do not delete this line diff --git a/src/NETGENPlugin/NETGENPlugin_Mesher.cxx b/src/NETGENPlugin/NETGENPlugin_Mesher.cxx index 83fd8de..3678e3b 100644 --- a/src/NETGENPlugin/NETGENPlugin_Mesher.cxx +++ b/src/NETGENPlugin/NETGENPlugin_Mesher.cxx @@ -28,6 +28,9 @@ #include "NETGENPlugin_Mesher.hxx" #include "NETGENPlugin_Hypothesis_2D.hxx" +#include +#include +#include #include #include #include @@ -62,10 +65,10 @@ using namespace std; */ //============================================================================= -NETGENPlugin_Mesher::NETGENPlugin_Mesher (SMESHDS_Mesh* meshDS, +NETGENPlugin_Mesher::NETGENPlugin_Mesher (SMESH_Mesh* mesh, const TopoDS_Shape& aShape, const bool isVolume) - : _meshDS (meshDS), + : _mesh (mesh), _shape (aShape), _isVolume(isVolume), _optimize(true) @@ -171,6 +174,7 @@ bool NETGENPlugin_Mesher::Compute() " second order = " << mparams.secondorder << "\n" " quad allowed = " << mparams.quad); + SMESH_ComputeErrorPtr error = SMESH_ComputeError::New(); nglib::Ng_Init(); // ------------------------- @@ -208,14 +212,17 @@ bool NETGENPlugin_Mesher::Compute() char *optstr = 0; int err = 0; + SMESH_Comment comment; try { err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr); + if (err) comment << "Error in netgen::OCCGenerateMesh()"; if (!err && !_optimize) { // we have got surface mesh only, so generate volume mesh startWith = endWith = netgen::MESHCONST_MESHVOLUME; err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr); + if (err) comment << "Error in netgen::OCCGenerateMesh()"; } if (!err && mparams.secondorder > 0) { @@ -225,8 +232,8 @@ bool NETGENPlugin_Mesher::Compute() } catch (netgen::NgException exc) { - MESSAGE ("Exception in NETGEN: " << exc.What()); - err = 1; + error->myName = err = COMPERR_ALGO_FAILED; + comment << exc.What(); } int nbNod = ngMesh->GetNP(); @@ -244,8 +251,9 @@ bool NETGENPlugin_Mesher::Compute() // Feed back the SMESHDS with the generated Nodes and Elements // ----------------------------------------------------------- + SMESHDS_Mesh* meshDS = _mesh->GetMeshDS(); bool isOK = ( !err && (_isVolume ? (nbVol > 0) : (nbFac > 0)) ); - if ( isOK ) + if ( true /*isOK*/ ) // get whatever built { // vector of nodes in which node index == netgen ID vector< SMDS_MeshNode* > nodeVec ( nbNod + 1 ); @@ -253,7 +261,7 @@ bool NETGENPlugin_Mesher::Compute() NCollection_Map pindMap; // create and insert nodes into nodeVec int i; - for (i = 1; i <= nbNod && isOK; ++i ) + for (i = 1; i <= nbNod /*&& isOK*/; ++i ) { const netgen::MeshPoint& ngPoint = ngMesh->Point(i); SMDS_MeshNode* node = NULL; @@ -263,7 +271,7 @@ bool NETGENPlugin_Mesher::Compute() { // point on vertex aVert = TopoDS::Vertex(occgeo.vmap(i)); - SMESHDS_SubMesh * submesh = _meshDS->MeshElements(aVert); + SMESHDS_SubMesh * submesh = meshDS->MeshElements(aVert); if (submesh) { SMDS_NodeIteratorPtr it = submesh->GetNodes(); @@ -277,25 +285,26 @@ bool NETGENPlugin_Mesher::Compute() newNodeOnVertex = true; } if (!node) - node = _meshDS->AddNode(ngPoint.X(), ngPoint.Y(), ngPoint.Z()); + node = meshDS->AddNode(ngPoint.X(), ngPoint.Y(), ngPoint.Z()); if (!node) { MESSAGE("Cannot create a mesh node"); - isOK = false; + if ( !comment.size() ) comment << "Cannot create a mesh node"; + nbSeg = nbFac = nbVol = isOK = 0; break; } nodeVec.at(i) = node; if (newNodeOnVertex) { // point on vertex - _meshDS->SetNodeOnVertex(node, aVert); + meshDS->SetNodeOnVertex(node, aVert); pindMap.Add(i); } } // create mesh segments along geometric edges NCollection_Map linkMap; - for (i = 1; i <= nbSeg && isOK; ++i ) + for (i = 1; i <= nbSeg/* && isOK*/; ++i ) { const netgen::Segment& seg = ngMesh->LineSegment(i); Link link(seg.p1, seg.p2); @@ -329,28 +338,29 @@ bool NETGENPlugin_Mesher::Compute() continue; if (!aEdge.IsNull()) { - _meshDS->SetNodeOnEdge(nodeVec.at(pind), aEdge, param); + meshDS->SetNodeOnEdge(nodeVec.at(pind), aEdge, param); pindMap.Add(pind); } } SMDS_MeshEdge* edge; if (nbp < 3) // second order ? - edge = _meshDS->AddEdge(nodeVec.at(pinds[0]), nodeVec.at(pinds[1])); + edge = meshDS->AddEdge(nodeVec.at(pinds[0]), nodeVec.at(pinds[1])); else - edge = _meshDS->AddEdge(nodeVec.at(pinds[0]), nodeVec.at(pinds[1]), + edge = meshDS->AddEdge(nodeVec.at(pinds[0]), nodeVec.at(pinds[1]), nodeVec.at(pinds[2])); if (!edge) { + if ( !comment.size() ) comment << "Cannot create a mesh edge"; MESSAGE("Cannot create a mesh edge"); - isOK = false; + nbSeg = nbFac = nbVol = isOK = 0; break; } if (!aEdge.IsNull()) - _meshDS->SetMeshElementOnShape(edge, aEdge); + meshDS->SetMeshElementOnShape(edge, aEdge); } // create mesh faces along geometric faces - for (i = 1; i <= nbFac && isOK; ++i ) + for (i = 1; i <= nbFac/* && isOK*/; ++i ) { const netgen::Element2d& elem = ngMesh->SurfaceElement(i); int aGeomFaceInd = elem.GetIndex(); @@ -368,7 +378,7 @@ bool NETGENPlugin_Mesher::Compute() if (!aFace.IsNull()) { const netgen::PointGeomInfo& pgi = elem.GeomInfoPi(j); - _meshDS->SetNodeOnFace(node, aFace, pgi.u, pgi.v); + meshDS->SetNodeOnFace(node, aFace, pgi.u, pgi.v); pindMap.Add(pind); } } @@ -376,16 +386,16 @@ bool NETGENPlugin_Mesher::Compute() switch (elem.GetType()) { case netgen::TRIG: - face = _meshDS->AddFace(nodes[0],nodes[1],nodes[2]); + face = meshDS->AddFace(nodes[0],nodes[1],nodes[2]); break; case netgen::QUAD: - face = _meshDS->AddFace(nodes[0],nodes[1],nodes[2],nodes[3]); + face = meshDS->AddFace(nodes[0],nodes[1],nodes[2],nodes[3]); break; case netgen::TRIG6: - face = _meshDS->AddFace(nodes[0],nodes[1],nodes[2],nodes[5],nodes[3],nodes[4]); + face = meshDS->AddFace(nodes[0],nodes[1],nodes[2],nodes[5],nodes[3],nodes[4]); break; case netgen::QUAD8: - face = _meshDS->AddFace(nodes[0],nodes[1],nodes[2],nodes[3], + face = meshDS->AddFace(nodes[0],nodes[1],nodes[2],nodes[3], nodes[4],nodes[7],nodes[5],nodes[6]); break; default: @@ -394,16 +404,17 @@ bool NETGENPlugin_Mesher::Compute() } if (!face) { + if ( !comment.size() ) comment << "Cannot create a mesh face"; MESSAGE("Cannot create a mesh face"); - isOK = false; + nbSeg = nbFac = nbVol = isOK = 0; break; } if (!aFace.IsNull()) - _meshDS->SetMeshElementOnShape(face, aFace); + meshDS->SetMeshElementOnShape(face, aFace); } // create tetrahedra - for (i = 1; i <= nbVol && isOK; ++i) + for (i = 1; i <= nbVol/* && isOK*/; ++i) { const netgen::Element& elem = ngMesh->VolumeElement(i); int aSolidInd = elem.GetIndex(); @@ -421,7 +432,7 @@ bool NETGENPlugin_Mesher::Compute() if (!aSolid.IsNull()) { // point in solid - _meshDS->SetNodeInVolume(node, aSolid); + meshDS->SetNodeInVolume(node, aSolid); pindMap.Add(pind); } } @@ -429,11 +440,11 @@ bool NETGENPlugin_Mesher::Compute() switch (elem.GetType()) { case netgen::TET: - vol = _meshDS->AddVolume(nodes[0],nodes[1],nodes[2],nodes[3]); + vol = meshDS->AddVolume(nodes[0],nodes[1],nodes[2],nodes[3]); break; case netgen::TET10: - vol = _meshDS->AddVolume(nodes[0],nodes[1],nodes[2],nodes[3], - nodes[4],nodes[7],nodes[5],nodes[6],nodes[8],nodes[9]); + vol = meshDS->AddVolume(nodes[0],nodes[1],nodes[2],nodes[3], + nodes[4],nodes[7],nodes[5],nodes[6],nodes[8],nodes[9]); break; default: MESSAGE("NETGEN created a volume of unexpected type, ignoring"); @@ -441,17 +452,41 @@ bool NETGENPlugin_Mesher::Compute() } if (!vol) { + if ( !comment.size() ) comment << "Cannot create a mesh volume"; MESSAGE("Cannot create a mesh volume"); - isOK = false; + nbSeg = nbFac = nbVol = isOK = 0; break; } if (!aSolid.IsNull()) - _meshDS->SetMeshElementOnShape(vol, aSolid); + meshDS->SetMeshElementOnShape(vol, aSolid); + } + } + + if ( error->IsOK() && ( !isOK || comment.size() > 0 )) + error->myName = COMPERR_ALGO_FAILED; + if ( !comment.empty() ) + error->myComment = comment; + + // set bad compute error to subshapes of all failed subshapes shapes + if ( !error->IsOK() && err ) + { + for (int i = 1; i <= occgeo.fmap.Extent(); i++) { + int status = occgeo.facemeshstatus[i-1]; + if (status == 1 ) continue; + if ( SMESH_subMesh* sm = _mesh->GetSubMeshContaining( occgeo.fmap( i ))) { + SMESH_ComputeErrorPtr& smError = sm->GetComputeError(); + if ( !smError || smError->IsOK() ) { + if ( status == -1 ) + smError.reset( new SMESH_ComputeError( error->myName, error->myComment )); + else + smError.reset( new SMESH_ComputeError( COMPERR_ALGO_FAILED, "Ignored" )); + } + } } } nglib::Ng_DeleteMesh((nglib::Ng_Mesh*)ngMesh); nglib::Ng_Exit(); - return isOK; + return error->IsOK(); } diff --git a/src/NETGENPlugin/NETGENPlugin_Mesher.hxx b/src/NETGENPlugin/NETGENPlugin_Mesher.hxx index 81c30e8..18ee455 100644 --- a/src/NETGENPlugin/NETGENPlugin_Mesher.hxx +++ b/src/NETGENPlugin/NETGENPlugin_Mesher.hxx @@ -31,6 +31,9 @@ #include "NETGENPlugin_Defs.hxx" +#include "SMESH_ComputeError.hxx" + +class SMESH_Mesh; class SMESHDS_Mesh; class TopoDS_Shape; class NETGENPlugin_Hypothesis; @@ -44,7 +47,7 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_Mesher public: // ---------- PUBLIC METHODS ---------- - NETGENPlugin_Mesher (SMESHDS_Mesh* meshDS, const TopoDS_Shape& aShape, + NETGENPlugin_Mesher (SMESH_Mesh* mesh, const TopoDS_Shape& aShape, const bool isVolume); void SetParameters(const NETGENPlugin_Hypothesis* hyp); @@ -52,7 +55,7 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_Mesher bool Compute(); private: - SMESHDS_Mesh* _meshDS; + SMESH_Mesh* _mesh; const TopoDS_Shape& _shape; bool _isVolume; bool _optimize; diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D.cxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D.cxx index 677e289..719ec01 100644 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D.cxx +++ b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D.cxx @@ -119,53 +119,10 @@ bool NETGENPlugin_NETGEN_2D::CheckHypothesis bool NETGENPlugin_NETGEN_2D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape) { - SMESHDS_Mesh* meshDS = aMesh.GetMeshDS(); + //SMESHDS_Mesh* meshDS = aMesh.GetMeshDS(); - NETGENPlugin_Mesher mesher(meshDS, aShape, false); + NETGENPlugin_Mesher mesher(&aMesh, aShape, false); +// NETGENPlugin_Mesher mesher(meshDS, aShape, false); mesher.SetParameters(_hypothesis); return mesher.Compute(); } - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & NETGENPlugin_NETGEN_2D::SaveTo(ostream & save) -{ - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & NETGENPlugin_NETGEN_2D::LoadFrom(istream & load) -{ - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator << (ostream & save, NETGENPlugin_NETGEN_2D & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >> (istream & load, NETGENPlugin_NETGEN_2D & hyp) -{ - return hyp.LoadFrom( load ); -} diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D.hxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D.hxx index 1b3fdf2..11ed70d 100644 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D.hxx +++ b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D.hxx @@ -51,11 +51,6 @@ public: virtual bool Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape); - ostream & SaveTo(ostream & save); - istream & LoadFrom(istream & load); - friend ostream & operator << (ostream & save, NETGENPlugin_NETGEN_2D & hyp); - friend istream & operator >> (istream & load, NETGENPlugin_NETGEN_2D & hyp); - protected: const NETGENPlugin_Hypothesis_2D* _hypothesis; }; diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.cxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.cxx index c10e6b3..24bbe48 100644 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.cxx +++ b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.cxx @@ -121,53 +121,10 @@ bool NETGENPlugin_NETGEN_2D3D::CheckHypothesis bool NETGENPlugin_NETGEN_2D3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape) { - SMESHDS_Mesh* meshDS = aMesh.GetMeshDS(); +// SMESHDS_Mesh* meshDS = aMesh.GetMeshDS(); - NETGENPlugin_Mesher mesher(meshDS, aShape, true); + NETGENPlugin_Mesher mesher(&aMesh, aShape, true); +// NETGENPlugin_Mesher mesher(meshDS, aShape, true); mesher.SetParameters(_hypothesis); return mesher.Compute(); } - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & NETGENPlugin_NETGEN_2D3D::SaveTo(ostream & save) -{ - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & NETGENPlugin_NETGEN_2D3D::LoadFrom(istream & load) -{ - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator << (ostream & save, NETGENPlugin_NETGEN_2D3D & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >> (istream & load, NETGENPlugin_NETGEN_2D3D & hyp) -{ - return hyp.LoadFrom( load ); -} diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.hxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.hxx index 89c7a61..9d086ad 100644 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.hxx +++ b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.hxx @@ -51,11 +51,6 @@ public: virtual bool Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape); - ostream & SaveTo(ostream & save); - istream & LoadFrom(istream & load); - friend ostream & operator << (ostream & save, NETGENPlugin_NETGEN_2D3D & hyp); - friend istream & operator >> (istream & load, NETGENPlugin_NETGEN_2D3D & hyp); - protected: const NETGENPlugin_Hypothesis* _hypothesis; }; diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx index 107d112..f481c10 100644 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx +++ b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx @@ -28,12 +28,13 @@ //============================================================================= #include "NETGENPlugin_NETGEN_3D.hxx" -#include "SMESH_Gen.hxx" -#include "SMESH_Mesh.hxx" -#include "SMESH_ControlsDef.hxx" -#include "SMESHDS_Mesh.hxx" #include "SMDS_MeshElement.hxx" #include "SMDS_MeshNode.hxx" +#include "SMESHDS_Mesh.hxx" +#include "SMESH_Comment.hxx" +#include "SMESH_ControlsDef.hxx" +#include "SMESH_Gen.hxx" +#include "SMESH_Mesh.hxx" #include "SMESH_MesherHelper.hxx" #include @@ -158,7 +159,8 @@ bool NETGENPlugin_NETGEN_3D::Compute(SMESH_Mesh& aMesh, // get triangles on aShell and make a map of nodes to Netgen node IDs // ------------------------------------------------------------------- - SMESH_MesherHelper* myTool = new SMESH_MesherHelper(aMesh); + SMESH_MesherHelper helper(aMesh); + SMESH_MesherHelper* myTool = &helper; bool _quadraticMesh = myTool->IsQuadraticSubMesh(aShape); typedef map< const SMDS_MeshNode*, int> TNodeToIDMap; @@ -185,12 +187,12 @@ bool NETGENPlugin_NETGEN_3D::Compute(SMESH_Mesh& aMesh, { // check element const SMDS_MeshElement* elem = iteratorElem->next(); - if ( !elem || - !( elem->NbNodes()==3 || ( _quadraticMesh && elem->NbNodes()==6) ) ) { - INFOS( "NETGENPlugin_NETGEN_3D::Compute(), bad mesh"); - delete myTool; myTool = 0; - return false; - } + if ( !elem ) + return error( COMPERR_BAD_INPUT_MESH, "Null element encounters"); + bool isTraingle = ( elem->NbNodes()==3 || (_quadraticMesh && elem->NbNodes()==6 )); + if ( !isTraingle ) + return error( COMPERR_BAD_INPUT_MESH, + SMESH_Comment("Not triangle element ")<GetID()); // keep a triangle triangles.push_back( elem ); isReversed.push_back( isRev ); @@ -314,8 +316,18 @@ bool NETGENPlugin_NETGEN_3D::Compute(SMESH_Mesh& aMesh, } catch (...) { MESSAGE("An exception has been caught during the Volume Mesh Generation ..."); + error(dfltErr(), "Exception in Ng_GenerateVolumeMesh()"); status = NG_VOLUME_FAILURE; } + if ( GetComputeError()->IsOK() ) { + switch ( status ) { + case NG_SURFACE_INPUT_ERROR:error( status, "NG_SURFACE_INPUT_ERROR"); + case NG_VOLUME_FAILURE: error( status, "NG_VOLUME_FAILURE"); + case NG_STL_INPUT_ERROR: error( status, "NG_STL_INPUT_ERROR"); + case NG_SURFACE_FAILURE: error( status, "NG_SURFACE_FAILURE"); + case NG_FILE_NOT_FOUND: error( status, "NG_FILE_NOT_FOUND"); + }; + } int Netgen_NbOfNodesNew = Ng_GetNP(Netgen_mesh); @@ -329,7 +341,7 @@ bool NETGENPlugin_NETGEN_3D::Compute(SMESH_Mesh& aMesh, // Feed back the SMESHDS with the generated Nodes and Volume Elements // ------------------------------------------------------------------- - bool isOK = ( status == NG_OK && Netgen_NbOfTetra > 0 ); + bool isOK = ( /*status == NG_OK &&*/ Netgen_NbOfTetra > 0 );// get whatever built if ( isOK ) { // vector of nodes in which node index == netgen ID @@ -366,51 +378,5 @@ bool NETGENPlugin_NETGEN_3D::Compute(SMESH_Mesh& aMesh, Ng_DeleteMesh(Netgen_mesh); Ng_Exit(); - delete myTool; myTool = 0; - - return isOK; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & NETGENPlugin_NETGEN_3D::SaveTo(ostream & save) -{ - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & NETGENPlugin_NETGEN_3D::LoadFrom(istream & load) -{ - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator << (ostream & save, NETGENPlugin_NETGEN_3D & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >> (istream & load, NETGENPlugin_NETGEN_3D & hyp) -{ - return hyp.LoadFrom( load ); + return (status == NG_OK); } diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx index 77d0488..4edec42 100644 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx +++ b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx @@ -49,11 +49,6 @@ public: virtual bool Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape); - ostream & SaveTo(ostream & save); - istream & LoadFrom(istream & load); - friend ostream & operator << (ostream & save, NETGENPlugin_NETGEN_3D & hyp); - friend istream & operator >> (istream & load, NETGENPlugin_NETGEN_3D & hyp); - protected: double _maxElementVolume; -- 2.39.2