From 2ef67f753e648003d6ce9b1157f723461ec2251a Mon Sep 17 00:00:00 2001 From: eap Date: Tue, 5 Jul 2011 12:04:49 +0000 Subject: [PATCH] restore "QuadranglePreference" hyp as it can be used by NETGEN 2D together with "Max. Elemet Area" for example --- doc/salome/gui/SMESH/input/about_hypo.doc | 1 + .../gui/SMESH/input/additional_hypo.doc | 9 ++ idl/SMESH_BasicHypothesis.idl | 11 ++ resources/StdMeshers.xml | 9 +- src/StdMeshers/Makefile.am | 2 + .../StdMeshers_QuadranglePreference.cxx | 108 ++++++++++++++++++ .../StdMeshers_QuadranglePreference.hxx | 68 +++++++++++ src/StdMeshers_I/Makefile.am | 2 + .../StdMeshers_QuadranglePreference_i.cxx | 98 ++++++++++++++++ .../StdMeshers_QuadranglePreference_i.hxx | 65 +++++++++++ src/StdMeshers_I/StdMeshers_i.cxx | 7 +- 11 files changed, 375 insertions(+), 5 deletions(-) create mode 100644 src/StdMeshers/StdMeshers_QuadranglePreference.cxx create mode 100644 src/StdMeshers/StdMeshers_QuadranglePreference.hxx create mode 100644 src/StdMeshers_I/StdMeshers_QuadranglePreference_i.cxx create mode 100644 src/StdMeshers_I/StdMeshers_QuadranglePreference_i.hxx diff --git a/doc/salome/gui/SMESH/input/about_hypo.doc b/doc/salome/gui/SMESH/input/about_hypo.doc index b03a7f29a..f655e1a69 100644 --- a/doc/salome/gui/SMESH/input/about_hypo.doc +++ b/doc/salome/gui/SMESH/input/about_hypo.doc @@ -53,6 +53,7 @@ with other hypotheses:
  • Propagation of 1D Hypothesis on opposite edges
  • Non conform mesh allowed
  • Quadratic mesh
  • +
  • Quadrangle preference
  • Viscous layers
  • diff --git a/doc/salome/gui/SMESH/input/additional_hypo.doc b/doc/salome/gui/SMESH/input/additional_hypo.doc index a3e4e6a3f..12aa8a261 100644 --- a/doc/salome/gui/SMESH/input/additional_hypo.doc +++ b/doc/salome/gui/SMESH/input/additional_hypo.doc @@ -32,6 +32,15 @@ has been locally defined on the opposite edge.
    See Also a sample TUI Script of a \ref tui_propagation "Propagation hypothesis" operation +

    Quadrangle Preference

    + +This additional hypothesis can be used together with Netgen 2D algorithm. +It allows Netgen 2D to build quadrangular meshes. + +
    +This hypothesis has one restriction on its work: the total quantity of +segments on all four sides of the face must be even (divisible by 2). + \anchor viscous_layers_anchor

    Viscous Layers

    diff --git a/idl/SMESH_BasicHypothesis.idl b/idl/SMESH_BasicHypothesis.idl index 9b6a88ebb..1e8218e44 100644 --- a/idl/SMESH_BasicHypothesis.idl +++ b/idl/SMESH_BasicHypothesis.idl @@ -469,6 +469,17 @@ module StdMeshers { }; + /*! + * StdMeshers_QuadranglePreference: interface of "QuadranglePreference" hypothesis. + * This hypothesis is used by StdMeshers_Quadrangle_2D algorithm. + * Presence of this hypothesis forces construction of quadrangles if the number + * of nodes on opposite edges is not the same in the case where the global number + * of nodes on edges is even + */ + interface StdMeshers_QuadranglePreference : SMESH::SMESH_Hypothesis + { + }; + /*! * StdMeshers_QuadraticMesh: interface of "QuadraticMesh" hypothesis. * This is an auxiliary 1D hypothesis whose presence forces construction diff --git a/resources/StdMeshers.xml b/resources/StdMeshers.xml index bc360fbce..795dd07fe 100644 --- a/resources/StdMeshers.xml +++ b/resources/StdMeshers.xml @@ -90,6 +90,12 @@ icon-id="mesh_hypo_length.png" dim="2"/> + + diff --git a/src/StdMeshers/Makefile.am b/src/StdMeshers/Makefile.am index 5a09613bd..a19f67963 100644 --- a/src/StdMeshers/Makefile.am +++ b/src/StdMeshers/Makefile.am @@ -45,6 +45,7 @@ salomeinclude_HEADERS = \ StdMeshers_Penta_3D.hxx \ StdMeshers_AutomaticLength.hxx \ StdMeshers_Distribution.hxx \ + StdMeshers_QuadranglePreference.hxx \ StdMeshers_QuadraticMesh.hxx \ StdMeshers_NumberOfLayers.hxx \ StdMeshers_NumberOfLayers2D.hxx \ @@ -99,6 +100,7 @@ dist_libStdMeshers_la_SOURCES = \ StdMeshers_Hexa_3D.cxx \ StdMeshers_AutomaticLength.cxx \ StdMeshers_Distribution.cxx \ + StdMeshers_QuadranglePreference.cxx \ StdMeshers_QuadraticMesh.cxx \ StdMeshers_NumberOfLayers.cxx \ StdMeshers_NumberOfLayers2D.cxx \ diff --git a/src/StdMeshers/StdMeshers_QuadranglePreference.cxx b/src/StdMeshers/StdMeshers_QuadranglePreference.cxx new file mode 100644 index 000000000..7636a5c8e --- /dev/null +++ b/src/StdMeshers/StdMeshers_QuadranglePreference.cxx @@ -0,0 +1,108 @@ +// Copyright (C) 2007-2011 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 StdMeshers_QuadranglePreference : implementaion of SMESH idl descriptions +// File : StdMeshers_QuadranglePreference.cxx +// Module : SMESH +// +#include "StdMeshers_QuadranglePreference.hxx" +#include "utilities.h" + +using namespace std; + +//============================================================================= +/*! + * + */ +//============================================================================= + +StdMeshers_QuadranglePreference::StdMeshers_QuadranglePreference(int hypId, + int studyId, + SMESH_Gen * gen) + :SMESH_Hypothesis(hypId, studyId, gen) +{ + _name = "QuadranglePreference"; + _param_algo_dim = -2; // auxiliary used by NETGEN 2D +} + +//============================================================================= +/*! + * + */ +//============================================================================= + +StdMeshers_QuadranglePreference::~StdMeshers_QuadranglePreference() +{ +} + +//============================================================================= +/*! + * + */ +//============================================================================= + +ostream & StdMeshers_QuadranglePreference::SaveTo(ostream & save) +{ + return save; +} + +//============================================================================= +/*! + * + */ +//============================================================================= + +istream & StdMeshers_QuadranglePreference::LoadFrom(istream & load) +{ + return load; +} + +//================================================================================ +/*! + * \brief Initialize my parameter values by the mesh built on the geometry + * \param theMesh - the built mesh + * \param theShape - the geometry of interest + * \retval bool - true if parameter values have been successfully defined + * + * Just return false as this hypothesis does not have parameters values + */ +//================================================================================ + +bool StdMeshers_QuadranglePreference::SetParametersByMesh(const SMESH_Mesh* /*theMesh*/, + const TopoDS_Shape& /*theShape*/) +{ + return false; +} + +//================================================================================ +/*! + * \brief Initialize my parameter values by default parameters. + * \retval bool - true if parameter values have been successfully defined + */ +//================================================================================ + +bool StdMeshers_QuadranglePreference::SetParametersByDefaults(const TDefaults& /*dflts*/, + const SMESH_Mesh* /*theMesh*/) +{ + return false; +} + diff --git a/src/StdMeshers/StdMeshers_QuadranglePreference.hxx b/src/StdMeshers/StdMeshers_QuadranglePreference.hxx new file mode 100644 index 000000000..98837a60e --- /dev/null +++ b/src/StdMeshers/StdMeshers_QuadranglePreference.hxx @@ -0,0 +1,68 @@ +// Copyright (C) 2007-2011 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 StdMeshers : implementaion of SMESH idl descriptions +// File : StdMeshers_QuadranglePreference.hxx +// Module : SMESH +// +#ifndef _StdMeshers_QuadranglePreference_HXX_ +#define _StdMeshers_QuadranglePreference_HXX_ + +#include "SMESH_StdMeshers.hxx" + +#include "SMESH_Hypothesis.hxx" +#include "Utils_SALOME_Exception.hxx" + +/*! + * \brief Hypothesis for StdMeshers_Quadrangle_2D, forcing construction + * of quadrangles if the number of nodes on opposite edges is not the same. + * GIBI can do it if the global number of nodes is even (DALL operator). + * See PAL10467 + */ +class STDMESHERS_EXPORT StdMeshers_QuadranglePreference:public SMESH_Hypothesis +{ + public: + StdMeshers_QuadranglePreference(int hypId, int studyId, SMESH_Gen * gen); + virtual ~ StdMeshers_QuadranglePreference(); + + virtual std::ostream & SaveTo(std::ostream & save); + virtual std::istream & LoadFrom(std::istream & load); + + /*! + * \brief Initialize my parameter values by the mesh built on the geometry + * \param theMesh - the built mesh + * \param theShape - the geometry of interest + * \retval bool - true if parameter values have been successfully defined + * + * Just return false as this hypothesis does not have parameters values + */ + virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape); + + /*! + * \brief Initialize my parameter values by default parameters. + * \retval bool - true if parameter values have been successfully defined + */ + virtual bool SetParametersByDefaults(const TDefaults& dflts, const SMESH_Mesh* theMesh=0); + +}; + +#endif diff --git a/src/StdMeshers_I/Makefile.am b/src/StdMeshers_I/Makefile.am index f4660cff0..457d7217a 100644 --- a/src/StdMeshers_I/Makefile.am +++ b/src/StdMeshers_I/Makefile.am @@ -43,6 +43,7 @@ salomeinclude_HEADERS = \ StdMeshers_MEFISTO_2D_i.hxx \ StdMeshers_Hexa_3D_i.hxx \ StdMeshers_AutomaticLength_i.hxx \ + StdMeshers_QuadranglePreference_i.hxx \ StdMeshers_QuadraticMesh_i.hxx \ StdMeshers_NumberOfLayers_i.hxx \ StdMeshers_NumberOfLayers2D_i.hxx \ @@ -89,6 +90,7 @@ dist_libStdMeshersEngine_la_SOURCES = \ StdMeshers_MEFISTO_2D_i.cxx \ StdMeshers_Hexa_3D_i.cxx \ StdMeshers_AutomaticLength_i.cxx \ + StdMeshers_QuadranglePreference_i.cxx \ StdMeshers_QuadraticMesh_i.cxx \ StdMeshers_NumberOfLayers_i.cxx \ StdMeshers_NumberOfLayers2D_i.cxx \ diff --git a/src/StdMeshers_I/StdMeshers_QuadranglePreference_i.cxx b/src/StdMeshers_I/StdMeshers_QuadranglePreference_i.cxx new file mode 100644 index 000000000..5d09d33cd --- /dev/null +++ b/src/StdMeshers_I/StdMeshers_QuadranglePreference_i.cxx @@ -0,0 +1,98 @@ +// Copyright (C) 2007-2011 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_QuadranglePreference_i.cxx +// Moved here from SMESH_LocalLength_i.cxx +// Author : Paul RASCLE, EDF +// Module : SMESH +// +#include "StdMeshers_QuadranglePreference_i.hxx" +#include "SMESH_Gen_i.hxx" +#include "SMESH_Gen.hxx" + +#include "Utils_CorbaException.hxx" +#include "utilities.h" + +#include + +using namespace std; + +//============================================================================= +/*! + * StdMeshers_QuadranglePreference_i::StdMeshers_QuadranglePreference_i + * + * Constructor + */ +//============================================================================= + +StdMeshers_QuadranglePreference_i::StdMeshers_QuadranglePreference_i +( PortableServer::POA_ptr thePOA, + int theStudyId, + ::SMESH_Gen* theGenImpl ): SALOME::GenericObj_i( thePOA ), + SMESH_Hypothesis_i( thePOA ) +{ + myBaseImpl = new ::StdMeshers_QuadranglePreference( theGenImpl->GetANewId(), + theStudyId, + theGenImpl ); +} + +//============================================================================= +/*! + * StdMeshers_QuadranglePreference_i::~StdMeshers_QuadranglePreference_i + * + * Destructor + */ +//============================================================================= + +StdMeshers_QuadranglePreference_i::~StdMeshers_QuadranglePreference_i() +{ +} + +//============================================================================= +/*! + * StdMeshers_QuadranglePreference_i::GetImpl + * + * Get implementation + */ +//============================================================================= + +::StdMeshers_QuadranglePreference* StdMeshers_QuadranglePreference_i::GetImpl() +{ + return ( ::StdMeshers_QuadranglePreference* )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_QuadranglePreference_i::IsDimSupported( SMESH::Dimension type ) +{ + return type == SMESH::DIM_2D; +} + diff --git a/src/StdMeshers_I/StdMeshers_QuadranglePreference_i.hxx b/src/StdMeshers_I/StdMeshers_QuadranglePreference_i.hxx new file mode 100644 index 000000000..ec3a62ac7 --- /dev/null +++ b/src/StdMeshers_I/StdMeshers_QuadranglePreference_i.hxx @@ -0,0 +1,65 @@ +// Copyright (C) 2007-2011 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_QuadranglePreference_i.hxx +// Moved here from SMESH_LocalLength_i.hxx +// Author : Paul RASCLE, EDF +// Module : SMESH +// +#ifndef _SMESH_QuadranglePreference_I_HXX_ +#define _SMESH_QuadranglePreference_I_HXX_ + +#include "SMESH_StdMeshers_I.hxx" + +#include +#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) + +#include "SMESH_Hypothesis_i.hxx" +#include "StdMeshers_QuadranglePreference.hxx" + +class SMESH_Gen; + +// ====================================================== +// Local Length hypothesis +// ====================================================== +class STDMESHERS_I_EXPORT StdMeshers_QuadranglePreference_i: + public virtual POA_StdMeshers::StdMeshers_QuadranglePreference, + public virtual SMESH_Hypothesis_i +{ +public: + // Constructor + StdMeshers_QuadranglePreference_i( PortableServer::POA_ptr thePOA, + int theStudyId, + ::SMESH_Gen* theGenImpl ); + // Destructor + virtual ~StdMeshers_QuadranglePreference_i(); + + // Get implementation + ::StdMeshers_QuadranglePreference* GetImpl(); + + // Verify whether hypothesis supports given entity type + CORBA::Boolean IsDimSupported( SMESH::Dimension type ); +}; + +#endif + diff --git a/src/StdMeshers_I/StdMeshers_i.cxx b/src/StdMeshers_I/StdMeshers_i.cxx index a8274ffb4..5d0956aea 100644 --- a/src/StdMeshers_I/StdMeshers_i.cxx +++ b/src/StdMeshers_I/StdMeshers_i.cxx @@ -40,7 +40,7 @@ #include "StdMeshers_Deflection1D_i.hxx" #include "StdMeshers_Propagation_i.hxx" #include "StdMeshers_LengthFromEdges_i.hxx" -//#include "StdMeshers_QuadranglePreference_i.hxx" +#include "StdMeshers_QuadranglePreference_i.hxx" //#include "StdMeshers_TrianglePreference_i.hxx" #include "StdMeshers_QuadraticMesh_i.hxx" #include "StdMeshers_MaxElementArea_i.hxx" @@ -145,8 +145,9 @@ STDMESHERS_I_EXPORT else if (strcmp(aHypName, "AutomaticLength") == 0) aCreator = new StdHypothesisCreator_i; else if (strcmp(aHypName, "QuadranglePreference") == 0) - //aCreator = new StdHypothesisCreator_i; - aCreator = new QuadrangleParamsCreator< StdMeshers::QUAD_QUADRANGLE_PREF >(); + // do not convert to StdMeshers_QuadrangleParams_i as it is used by NETGEN 2D + aCreator = new StdHypothesisCreator_i; + //aCreator = new QuadrangleParamsCreator< StdMeshers::QUAD_QUADRANGLE_PREF >(); else if (strcmp(aHypName, "TrianglePreference") == 0) //aCreator = new StdHypothesisCreator_i; aCreator = new QuadrangleParamsCreator< StdMeshers::QUAD_TRIANGLE_PREF >(); -- 2.39.2