X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FNETGENPlugin%2FNETGENPlugin_NETGEN_2D3D.cxx;h=0e0b6ba1aa68f45b0f41d1359ceb346222dcf848;hb=HEAD;hp=9dc9650ac76aac5dfaead4ce47e779e0d5ff584f;hpb=b8fc64c6d71bf196b76b855ca89dd86267bd7478;p=plugins%2Fnetgenplugin.git diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.cxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.cxx index 9dc9650..0e0b6ba 100644 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.cxx +++ b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D3D.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -29,23 +29,23 @@ // #include "NETGENPlugin_NETGEN_2D3D.hxx" #include "NETGENPlugin_Hypothesis.hxx" -#include "NETGENPlugin_SimpleHypothesis_2D.hxx" +#include "NETGENPlugin_SimpleHypothesis_3D.hxx" #include "NETGENPlugin_Mesher.hxx" +#include +#include #include #include -#include -#include +#include + #include #include -#ifdef WITH_SMESH_CANCEL_COMPUTE namespace nglib { #include } #include -#endif using namespace std; @@ -55,15 +55,16 @@ using namespace std; */ //============================================================================= -NETGENPlugin_NETGEN_2D3D::NETGENPlugin_NETGEN_2D3D(int hypId, int studyId, +NETGENPlugin_NETGEN_2D3D::NETGENPlugin_NETGEN_2D3D(int hypId, SMESH_Gen* gen) - : SMESH_3D_Algo(hypId, studyId, gen) + : SMESH_3D_Algo(hypId, gen) { - MESSAGE("NETGENPlugin_NETGEN_2D3D::NETGENPlugin_NETGEN_2D3D"); + //MESSAGE("NETGENPlugin_NETGEN_2D3D::NETGENPlugin_NETGEN_2D3D"); _name = "NETGEN_2D3D"; _shapeType = (1 << TopAbs_SHELL) | (1 << TopAbs_SOLID);// 1 bit /shape type _compatibleHypothesis.push_back("NETGEN_Parameters"); _compatibleHypothesis.push_back("NETGEN_SimpleParameters_3D"); + _compatibleHypothesis.push_back( StdMeshers_ViscousLayers::GetHypType() ); _requireDiscreteBoundary = false; _onlyUnaryInput = false; _hypothesis = NULL; @@ -72,51 +73,56 @@ NETGENPlugin_NETGEN_2D3D::NETGENPlugin_NETGEN_2D3D(int hypId, int studyId, //============================================================================= /*! - * + * */ //============================================================================= NETGENPlugin_NETGEN_2D3D::~NETGENPlugin_NETGEN_2D3D() { - MESSAGE("NETGENPlugin_NETGEN_2D3D::~NETGENPlugin_NETGEN_2D3D"); + //MESSAGE("NETGENPlugin_NETGEN_2D3D::~NETGENPlugin_NETGEN_2D3D"); } //============================================================================= /*! - * + * */ //============================================================================= -bool NETGENPlugin_NETGEN_2D3D::CheckHypothesis - (SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - SMESH_Hypothesis::Hypothesis_Status& aStatus) +bool NETGENPlugin_NETGEN_2D3D::CheckHypothesis (SMESH_Mesh& aMesh, + const TopoDS_Shape& aShape, + Hypothesis_Status& aStatus) { - MESSAGE("NETGENPlugin_NETGEN_2D3D::CheckHypothesis"); + _hypothesis = NULL; + _viscousLayersHyp = NULL; + _mesher = NULL; - _hypothesis = NULL; - - const list& hyps = GetUsedHypothesis(aMesh, aShape); - int nbHyp = hyps.size(); - if (!nbHyp) + const list& hyps = GetUsedHypothesis(aMesh, aShape, /*noAux=*/false); + if ( hyps.empty() ) { aStatus = SMESH_Hypothesis::HYP_OK; return true; // can work with no hypothesis } - const SMESHDS_Hypothesis* theHyp = hyps.front(); // use only the first hypothesis - - string hypName = theHyp->GetName(); - - if ( find( _compatibleHypothesis.begin(), _compatibleHypothesis.end(), - hypName ) != _compatibleHypothesis.end() ) - { - _hypothesis = theHyp; - aStatus = SMESH_Hypothesis::HYP_OK; - } - else + list::const_iterator h = hyps.begin(); + for ( ; h != hyps.end(); ++h ) { - aStatus = SMESH_Hypothesis::HYP_INCOMPATIBLE; + const SMESHDS_Hypothesis* aHyp = *h; + std::string hypName = aHyp->GetName(); + + if ( std::find( _compatibleHypothesis.begin(), _compatibleHypothesis.end(), + hypName ) != _compatibleHypothesis.end() ) + { + if ( hypName == StdMeshers_ViscousLayers::GetHypType() ) + _viscousLayersHyp = dynamic_cast( aHyp ); + else + _hypothesis = aHyp; + aStatus = SMESH_Hypothesis::HYP_OK; + } + else + { + aStatus = SMESH_Hypothesis::HYP_INCOMPATIBLE; + break; + } } return aStatus == SMESH_Hypothesis::HYP_OK; @@ -131,13 +137,13 @@ bool NETGENPlugin_NETGEN_2D3D::CheckHypothesis bool NETGENPlugin_NETGEN_2D3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape) { -#ifdef WITH_SMESH_CANCEL_COMPUTE netgen::multithread.terminate = 0; -#endif NETGENPlugin_Mesher mesher(&aMesh, aShape, true); mesher.SetParameters(dynamic_cast(_hypothesis)); - mesher.SetParameters(dynamic_cast(_hypothesis)); + mesher.SetParameters(dynamic_cast(_hypothesis)); + mesher.SetParameters(_viscousLayersHyp); + mesher.SetSelfPointer( &_mesher ); return mesher.Compute(); } @@ -147,13 +153,28 @@ bool NETGENPlugin_NETGEN_2D3D::Compute(SMESH_Mesh& aMesh, */ //============================================================================= -#ifdef WITH_SMESH_CANCEL_COMPUTE void NETGENPlugin_NETGEN_2D3D::CancelCompute() { SMESH_Algo::CancelCompute(); netgen::multithread.terminate = 1; } -#endif + +//================================================================================ +/*! + * \brief Return progress of Compute() [0.,1] + */ +//================================================================================ + +double NETGENPlugin_NETGEN_2D3D::GetProgress() const +{ + double & progress = (double &)_progress; + if ( _mesher ) + progress = _mesher->GetProgress(this, &_progressTic, &_progress); + else if ( _progress > 0.001 ) + progress = 0.99; + + return _progress; +} //============================================================================= /*!