From e613ea2b8d537a9d7e94fda51e290cb9225e935b Mon Sep 17 00:00:00 2001 From: eap Date: Tue, 24 Jan 2017 19:31:19 +0300 Subject: [PATCH] IPAL53702: Quadrangle mapping does not use some boundary nodes IPAL53864: Viscous Layers 2D fails and is uneven at some points Fix failure but non-uniform thickness remains --- src/SMESH_SWIG/smeshBuilder.py | 41 ++++++++++--------- src/StdMeshers/StdMeshers_Quadrangle_2D.cxx | 3 +- src/StdMeshers/StdMeshers_ViscousLayers2D.cxx | 2 +- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/SMESH_SWIG/smeshBuilder.py b/src/SMESH_SWIG/smeshBuilder.py index 1b5f9ecfc..f289a5fe7 100644 --- a/src/SMESH_SWIG/smeshBuilder.py +++ b/src/SMESH_SWIG/smeshBuilder.py @@ -1787,27 +1787,29 @@ class Mesh: pass pass - ## Export the mesh in a file in MED format and chooses the \a version of MED format + ## Export the mesh in a file in MED format ## allowing to overwrite the file if it exists or add the exported data to its contents # @param f is the file name # @param auto_groups boolean parameter for creating/not creating # the groups Group_On_All_Nodes, Group_On_All_Faces, ... ; - # the typical use is auto_groups=false. - # @param version MED format version(MED_V2_1 or MED_V2_2) + # the typical use is auto_groups=False. + # @param version MED format version (MED_V2_1 or MED_V2_2, + # the latter meaning any current version). The parameter is + # obsolete since MED_V2_1 is no longer supported. # @param overwrite boolean parameter for overwriting/not overwriting the file # @param meshPart a part of mesh (group, sub-mesh) to export instead of the mesh - # @param autoDimension: if @c True (default), a space dimension of a MED mesh can be either + # @param autoDimension if @c True (default), a space dimension of a MED mesh can be either # - 1D if all mesh nodes lie on OX coordinate axis, or # - 2D if all mesh nodes lie on XOY coordinate plane, or - # - 3D in the rest cases. + # - 3D in the rest cases.
# If @a autoDimension is @c False, the space dimension is always 3. - # @param fields : list of GEOM fields defined on the shape to mesh. - # @param geomAssocFields : each character of this string means a need to export a + # @param fields list of GEOM fields defined on the shape to mesh. + # @param geomAssocFields each character of this string means a need to export a # corresponding field; correspondence between fields and characters is following: - # - 'v' stands for _vertices_ field; - # - 'e' stands for _edges_ field; - # - 'f' stands for _faces_ field; - # - 's' stands for _solids_ field. + # - 'v' stands for "_vertices _" field; + # - 'e' stands for "_edges _" field; + # - 'f' stands for "_faces _" field; + # - 's' stands for "_solids _" field. # @ingroup l2_impexp def ExportMED(self, f, auto_groups=0, version=MED_V2_2, overwrite=1, meshPart=None, autoDimension=True, fields=[], geomAssocFields=''): @@ -1906,22 +1908,23 @@ class Mesh: meshPart = self.mesh self.mesh.ExportGMF(meshPart, f, True) - ## Deprecated, used only for compatibility! Please, use ExportToMEDX() method instead. - # Export the mesh in a file in MED format and chooses the \a version of MED format - ## allowing to overwrite the file if it exists or add the exported data to its contents + ## Deprecated, used only for compatibility! Please, use ExportMED() method instead. + # Export the mesh in a file in MED format + # allowing to overwrite the file if it exists or add the exported data to its contents # @param f the file name - # @param version values are SMESH.MED_V2_1, SMESH.MED_V2_2 + # @param version MED format version (MED_V2_1 or MED_V2_2, + # the latter meaning any current version). The parameter is + # obsolete since MED_V2_1 is no longer supported. # @param opt boolean parameter for creating/not creating # the groups Group_On_All_Nodes, Group_On_All_Faces, ... # @param overwrite boolean parameter for overwriting/not overwriting the file - # @param autoDimension: if @c True (default), a space dimension of a MED mesh can be either + # @param autoDimension if @c True (default), a space dimension of a MED mesh can be either # - 1D if all mesh nodes lie on OX coordinate axis, or # - 2D if all mesh nodes lie on XOY coordinate plane, or - # - 3D in the rest cases. - # + # - 3D in the rest cases.
# If @a autoDimension is @c False, the space dimension is always 3. # @ingroup l2_impexp - def ExportToMED(self, f, version, opt=0, overwrite=1, autoDimension=True): + def ExportToMED(self, f, version=MED_V2_2, opt=0, overwrite=1, autoDimension=True): self.mesh.ExportToMEDX(f, opt, version, overwrite, autoDimension) # Operations with groups: diff --git a/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx b/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx index d72434501..15a7595d5 100644 --- a/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx +++ b/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx @@ -4523,7 +4523,7 @@ int StdMeshers_Quadrangle_2D::getCorners(const TopoDS_Face& theFace, // move corners to make sides equal by length int nbEqualV = equVerts.size(); int nbExcessV = nbEqualV - ( 1 + nbC[0] + nbC[1] ); - if ( nbExcessV > 0 ) // there is nbExcessV vertices that can become corners + if ( nbExcessV > 0 ) // there are nbExcessV vertices that can become corners { // calculate normalized length of each "side" enclosed between neighbor equVerts vector< double > accuLength; @@ -4584,6 +4584,7 @@ int StdMeshers_Quadrangle_2D::getCorners(const TopoDS_Face& theFace, if ( iBestEV > iS-1 + nbExcessV ) iBestEV = iS-1 + nbExcessV; theVertices[ iCorner ] = helper.IthVertex( 0, edgeVec[ evVec[ iBestEV ]]); + cornerInd [ iCorner ] = evVec[ iBestEV ]; refinedCorners.insert( evVec[ iBestEV ]); iCorner = helper.WrapIndex( iCorner + 1, cornerInd.size() ); } diff --git a/src/StdMeshers/StdMeshers_ViscousLayers2D.cxx b/src/StdMeshers/StdMeshers_ViscousLayers2D.cxx index 2de6e474c..e6f196aaf 100644 --- a/src/StdMeshers/StdMeshers_ViscousLayers2D.cxx +++ b/src/StdMeshers/StdMeshers_ViscousLayers2D.cxx @@ -1263,7 +1263,7 @@ void _ViscousBuilder2D::adjustCommonEdge( _PolyLine& LL, _PolyLine& LR ) if ( isR ) LR._lEdges.erase( LR._lEdges.begin()+1, eIt ); else - LL._lEdges.erase( eIt, --LL._lEdges.end() ); + LL._lEdges.erase( eIt+1, --LL._lEdges.end() ); // eIt = isR ? L._lEdges.begin()+1 : L._lEdges.end()-2; // for ( size_t i = 1; i < iLE; ++i, eIt += dIt ) // eIt->_isBlocked = true;