From 61149a4aee0963e4ad553e89702330c285e1c34f Mon Sep 17 00:00:00 2001 From: eap Date: Tue, 18 Jan 2011 12:21:27 +0000 Subject: [PATCH] 0020832: EDF 1359 SMESH : Automatic meshing of boundary layers + StdMeshers_ViscousLayers_i.hxx --- src/StdMeshers_I/Makefile.am | 6 +- .../StdMeshers_ViscousLayers_i.cxx | 215 ++++++++++++++++++ .../StdMeshers_ViscousLayers_i.hxx | 81 +++++++ src/StdMeshers_I/StdMeshers_i.cxx | 4 +- 4 files changed, 303 insertions(+), 3 deletions(-) create mode 100644 src/StdMeshers_I/StdMeshers_ViscousLayers_i.cxx create mode 100644 src/StdMeshers_I/StdMeshers_ViscousLayers_i.hxx diff --git a/src/StdMeshers_I/Makefile.am b/src/StdMeshers_I/Makefile.am index ab1e6c9c0..d669bd7f2 100644 --- a/src/StdMeshers_I/Makefile.am +++ b/src/StdMeshers_I/Makefile.am @@ -67,7 +67,8 @@ salomeinclude_HEADERS = \ StdMeshers_ImportSource1D_i.hxx \ StdMeshers_ImportSource2D_i.hxx \ StdMeshers_Import_1D_i.hxx \ - StdMeshers_Import_1D2D_i.hxx + StdMeshers_Import_1D2D_i.hxx \ + StdMeshers_ViscousLayers_i.hxx # Libraries targets lib_LTLIBRARIES = libStdMeshersEngine.la @@ -113,7 +114,8 @@ dist_libStdMeshersEngine_la_SOURCES = \ StdMeshers_ImportSource1D_i.cxx \ StdMeshers_ImportSource2D_i.cxx \ StdMeshers_Import_1D_i.cxx \ - StdMeshers_Import_1D2D_i.cxx + StdMeshers_Import_1D2D_i.cxx \ + StdMeshers_ViscousLayers_i.cxx # additionnal information to compil and link file libStdMeshersEngine_la_CPPFLAGS = \ diff --git a/src/StdMeshers_I/StdMeshers_ViscousLayers_i.cxx b/src/StdMeshers_I/StdMeshers_ViscousLayers_i.cxx new file mode 100644 index 000000000..b461843e8 --- /dev/null +++ b/src/StdMeshers_I/StdMeshers_ViscousLayers_i.cxx @@ -0,0 +1,215 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses +// File : StdMeshers_ViscousLayers_i.cxx +// Module : SMESH +// +#include "StdMeshers_ViscousLayers_i.hxx" + +#include "SMESH_Gen.hxx" +#include "SMESH_Gen_i.hxx" +#include "SMESH_PythonDump.hxx" +//#include "StdMeshers_ObjRefUlils.hxx" + +#include "Utils_CorbaException.hxx" +#include "utilities.h" + +#include + +#include CORBA_SERVER_HEADER(SMESH_Group) + +using namespace std; + +//============================================================================= +/*! + * StdMeshers_ViscousLayers_i::StdMeshers_ViscousLayers_i + * + * Constructor + */ +//============================================================================= + +StdMeshers_ViscousLayers_i::StdMeshers_ViscousLayers_i( PortableServer::POA_ptr thePOA, + int theStudyId, + ::SMESH_Gen* theGenImpl ) + : SALOME::GenericObj_i( thePOA ), + SMESH_Hypothesis_i( thePOA ) +{ + MESSAGE( "StdMeshers_ViscousLayers_i::StdMeshers_ViscousLayers_i" ); + myBaseImpl = new ::StdMeshers_ViscousLayers( theGenImpl->GetANewId(), + theStudyId, + theGenImpl ); +} + +//============================================================================= +/*! + * StdMeshers_ViscousLayers_i::~StdMeshers_ViscousLayers_i + * + * Destructor + */ +//============================================================================= + +StdMeshers_ViscousLayers_i::~StdMeshers_ViscousLayers_i() +{ + MESSAGE( "StdMeshers_ViscousLayers_i::~StdMeshers_ViscousLayers_i" ); +} + +//================================================================================ +/*! + * \brief + */ +//================================================================================ + +void StdMeshers_ViscousLayers_i::SetIgnoreFaces(const ::SMESH::long_array& faceIDs) +throw ( SALOME::SALOME_Exception ) +{ + vector ids( faceIDs.length() ); + for ( unsigned i = 0; i < ids.size(); ++i ) + if (( ids[i] = faceIDs[i] ) < 1 ) + THROW_SALOME_CORBA_EXCEPTION( "Invalid face id", SALOME::BAD_PARAM ); + GetImpl()->SetIgnoreFaces( ids ); + SMESH::TPythonDump() << _this() << ".SetIgnoreFaces( " << faceIDs << " )"; +} + +//================================================================================ +/*! + * \brief + */ +//================================================================================ + +SMESH::long_array* StdMeshers_ViscousLayers_i::GetIgnoreFaces() +{ + vector idsVec = GetImpl()->GetIgnoreFaces(); + SMESH::long_array_var ids = new SMESH::long_array; + ids->length( idsVec.size() ); + for ( unsigned i = 0; i < idsVec.size(); ++i ) + ids[i] = idsVec[i]; + return ids._retn(); +} + +//================================================================================ +/*! + * \brief + */ +//================================================================================ + +void StdMeshers_ViscousLayers_i::SetTotalThickness(::CORBA::Double thickness) +throw ( SALOME::SALOME_Exception ) +{ + if ( thickness < 1e-100 ) + THROW_SALOME_CORBA_EXCEPTION( "Invalid thickness", SALOME::BAD_PARAM ); + GetImpl()->SetTotalThickness(thickness); + SMESH::TPythonDump() << _this() << ".SetTotalThickness( " << thickness << " )"; +} + +//================================================================================ +/*! + * \brief + */ +//================================================================================ + +::CORBA::Double StdMeshers_ViscousLayers_i::GetTotalThickness() +{ + return GetImpl()->GetTotalThickness(); +} + +//================================================================================ +/*! + * \brief + * \param nb - + */ +//================================================================================ + +void StdMeshers_ViscousLayers_i::SetNumberLayers(::CORBA::Short nb) +throw ( SALOME::SALOME_Exception ) +{ + if ( nb < 1 ) + THROW_SALOME_CORBA_EXCEPTION( "Invalid number of layers", SALOME::BAD_PARAM ); + GetImpl()->SetNumberLayers( nb ); + SMESH::TPythonDump() << _this() << ".SetNumberLayers( " << nb << " )"; +} + +//================================================================================ +/*! + * \brief + */ +//================================================================================ + +::CORBA::Short StdMeshers_ViscousLayers_i::GetNumberLayers() +{ + return CORBA::Short( GetImpl()->GetNumberLayers() ); +} + +//================================================================================ +/*! + * \brief + * \param factor - + */ +//================================================================================ + +void StdMeshers_ViscousLayers_i::SetStretchFactor(::CORBA::Double factor) +throw ( SALOME::SALOME_Exception ) +{ + if ( factor < 1 ) + THROW_SALOME_CORBA_EXCEPTION( "Invalid stretch factor, it must be >= 1.0", SALOME::BAD_PARAM ); + GetImpl()->SetStretchFactor(factor); + SMESH::TPythonDump() << _this() << ".SetStretchFactor( " << factor << " )"; +} + +//================================================================================ +/*! + * \brief + * + */ +//================================================================================ + +::CORBA::Double StdMeshers_ViscousLayers_i::GetStretchFactor() +{ + return GetImpl()->GetStretchFactor(); +} + +//============================================================================= +/*! + * Get implementation + */ +//============================================================================= + +::StdMeshers_ViscousLayers* StdMeshers_ViscousLayers_i::GetImpl() +{ + MESSAGE( "StdMeshers_ViscousLayers_i::GetImpl" ); + return ( ::StdMeshers_ViscousLayers* )myBaseImpl; +} + +//================================================================================ +/*! + * \brief Verify whether hypothesis supports given entity type + * \param type - dimension (see SMESH::Dimension enumeration) + * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise + * + * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration) + */ +//================================================================================ +CORBA::Boolean StdMeshers_ViscousLayers_i::IsDimSupported( SMESH::Dimension type ) +{ + return type == SMESH::DIM_3D; +} + diff --git a/src/StdMeshers_I/StdMeshers_ViscousLayers_i.hxx b/src/StdMeshers_I/StdMeshers_ViscousLayers_i.hxx new file mode 100644 index 000000000..29699eb8b --- /dev/null +++ b/src/StdMeshers_I/StdMeshers_ViscousLayers_i.hxx @@ -0,0 +1,81 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses +// File : StdMeshers_ViscousLayers_i.hxx +// Module : SMESH +// +#ifndef _SMESH_ViscousLayers_I_HXX_ +#define _SMESH_ViscousLayers_I_HXX_ + +#include "SMESH_StdMeshers_I.hxx" + +#include +#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) + +#include "SMESH_Hypothesis_i.hxx" +#include "StdMeshers_ViscousLayers.hxx" + +class SMESH_Gen; + +class STDMESHERS_I_EXPORT StdMeshers_ViscousLayers_i: + public virtual POA_StdMeshers::StdMeshers_ViscousLayers, + public virtual SMESH_Hypothesis_i +{ + public: + // Constructor + StdMeshers_ViscousLayers_i( PortableServer::POA_ptr thePOA, + int theStudyId, + ::SMESH_Gen* theGenImpl ); + // Destructor + virtual ~StdMeshers_ViscousLayers_i(); + + void SetIgnoreFaces(const ::SMESH::long_array& faceIDs) throw ( SALOME::SALOME_Exception ); + SMESH::long_array* GetIgnoreFaces(); + + void SetTotalThickness(::CORBA::Double thickness) throw ( SALOME::SALOME_Exception ); + ::CORBA::Double GetTotalThickness(); + + void SetNumberLayers(::CORBA::Short nb) throw ( SALOME::SALOME_Exception ); + ::CORBA::Short GetNumberLayers(); + + void SetStretchFactor(::CORBA::Double factor) throw ( SALOME::SALOME_Exception ); + ::CORBA::Double GetStretchFactor(); + + // Get implementation + ::StdMeshers_ViscousLayers* GetImpl(); + + // Verify whether hypothesis supports given entity type + CORBA::Boolean IsDimSupported( SMESH::Dimension type ); + + // Redefined Persistence +// virtual char* SaveTo(); +// virtual void LoadFrom( const char* theStream ); +// virtual void UpdateAsMeshesRestored(); + + private: + //SMESH::string_array_var _groupEntries; + //std::vector< std::string > _groupIDs; +}; + +#endif + diff --git a/src/StdMeshers_I/StdMeshers_i.cxx b/src/StdMeshers_I/StdMeshers_i.cxx index a8f6a9824..ffeabda54 100644 --- a/src/StdMeshers_I/StdMeshers_i.cxx +++ b/src/StdMeshers_I/StdMeshers_i.cxx @@ -71,7 +71,7 @@ #include "StdMeshers_RadialQuadrangle_1D2D_i.hxx" #include "StdMeshers_Import_1D_i.hxx" #include "StdMeshers_Import_1D2D_i.hxx" - +#include "StdMeshers_ViscousLayers_i.hxx" template class StdHypothesisCreator_i:public HypothesisCreator_i { @@ -149,6 +149,8 @@ STDMESHERS_I_EXPORT aCreator = new StdHypothesisCreator_i; else if (strcmp(aHypName, "ImportSource2D") == 0) aCreator = new StdHypothesisCreator_i; + else if (strcmp(aHypName, "ViscousLayers") == 0) + aCreator = new StdHypothesisCreator_i; // Algorithms else if (strcmp(aHypName, "Regular_1D") == 0) -- 2.39.2