From 7084b4f9799cf4a0145ba86ab8b653de8f2d2bdb Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 5 Aug 2015 20:59:31 +0300 Subject: [PATCH 1/1] Fix regressions caused by improvements --- .../gui/SMESH/images/sew_after_merge.png | Bin 0 -> 23475 bytes .../gui/SMESH/images/sew_using_merge.png | Bin 0 -> 13275 bytes doc/salome/gui/SMESH/input/sewing_meshes.doc | 8 +- src/SMESHDS/SMESHDS_SubMesh.cxx | 140 ++++++++++-------- src/SMESHDS/SMESHDS_SubMesh.hxx | 7 +- src/SMESH_SWIG/smesh_algorithm.py | 14 +- src/StdMeshers/StdMeshers_FaceSide.cxx | 79 ++++++---- src/StdMeshers/StdMeshers_Projection_2D.cxx | 14 +- src/StdMeshers/StdMeshers_Quadrangle_2D.cxx | 9 +- 9 files changed, 161 insertions(+), 110 deletions(-) create mode 100644 doc/salome/gui/SMESH/images/sew_after_merge.png create mode 100644 doc/salome/gui/SMESH/images/sew_using_merge.png diff --git a/doc/salome/gui/SMESH/images/sew_after_merge.png b/doc/salome/gui/SMESH/images/sew_after_merge.png new file mode 100644 index 0000000000000000000000000000000000000000..43d6869f7f5065a8d2838ce1d222758feab80590 GIT binary patch literal 23475 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/sew_using_merge.png b/doc/salome/gui/SMESH/images/sew_using_merge.png new file mode 100644 index 0000000000000000000000000000000000000000..80cc44c67033422a6144f04c86566713412158ee GIT binary patch literal 13275 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/input/sewing_meshes.doc b/doc/salome/gui/SMESH/input/sewing_meshes.doc index ad5f15e65..b7640f30b 100644 --- a/doc/salome/gui/SMESH/input/sewing_meshes.doc +++ b/doc/salome/gui/SMESH/input/sewing_meshes.doc @@ -53,8 +53,12 @@ the opposite border. In practice the borders to sew often coincide and in this case it is difficult to specify the first and the last nodes of a border since they coincide with the first and the last nodes of the other -border. To cope with this, manually \ref merging_nodes_page to fuse -each pair of coincident nodes into one. +border. To cope with this, +\ref merging_nodes_page "merge" coincident nodes into one +beforehand. Two figures below illustrate this approach. +\image html sew_using_merge.png "Merge coincident nodes which are difficult to distinguish" +
+\image html sew_after_merge.png "After merging nodes it is easy to specify border nodes" The sewing algorithm is as follows:
    diff --git a/src/SMESHDS/SMESHDS_SubMesh.cxx b/src/SMESHDS/SMESHDS_SubMesh.cxx index f06ec6e31..04a0021fc 100644 --- a/src/SMESHDS/SMESHDS_SubMesh.cxx +++ b/src/SMESHDS/SMESHDS_SubMesh.cxx @@ -46,8 +46,6 @@ using namespace std; SMESHDS_SubMesh::SMESHDS_SubMesh(SMESHDS_Mesh *parent, int index) { myParent = parent; - myElements.clear(); - myNodes.clear(); myIndex = index; myUnusedIdNodes = 0; myUnusedIdElements = 0; @@ -65,61 +63,54 @@ SMESHDS_SubMesh::~SMESHDS_SubMesh() //======================================================================= //function : AddElement -//purpose : +//purpose : //======================================================================= void SMESHDS_SubMesh::AddElement(const SMDS_MeshElement * ME) { if (!IsComplexSubmesh()) + { + if ( ME->GetType() == SMDSAbs_Node ) + { + AddNode( static_cast< const SMDS_MeshNode* >( ME )); + return; + } + int oldShapeId = ME->getshapeId(); + if ( oldShapeId > 0 ) { - if ( ME->GetType() == SMDSAbs_Node ) + if (oldShapeId != myIndex) { - AddNode( static_cast< const SMDS_MeshNode* >( ME )); - return; + throw SALOME_Exception + (LOCALIZED("add element in subshape already belonging to a subshape")); } - int oldShapeId = ME->getshapeId(); - if ( oldShapeId > 0 ) + int idInSubShape = ME->getIdInShape(); + if (idInSubShape >= 0) + { + MESSAGE("add element in subshape already belonging to that subshape " + << ME->GetID() << " " << oldShapeId << " " << idInSubShape); + // check if ok: do nothing if ok + if (idInSubShape >= myElements.size()) { - if (oldShapeId != myIndex) - { - MESSAGE("add element in subshape already belonging to another subshape " - << ME->GetID() << " " << oldShapeId << " " << myIndex); - throw SALOME_Exception(LOCALIZED("add element in subshape already belonging to a subshape")); - } - else - { - int idInSubShape = ME->getIdInShape(); - if (idInSubShape >= 0) - { - MESSAGE("add element in subshape already belonging to that subshape " - << ME->GetID() << " " << oldShapeId << " " << idInSubShape); - // check if ok: do nothing if ok - if (idInSubShape >= myElements.size()) - { - MESSAGE("out of bounds " << idInSubShape << " " << myElements.size()); - throw SALOME_Exception(LOCALIZED("out of bounds")); - } - if (ME != myElements[idInSubShape]) - { - MESSAGE("not the same element"); - throw SALOME_Exception(LOCALIZED("not the same element")); - } - MESSAGE("already done, OK, nothing to do"); - return; - } - } + throw SALOME_Exception(LOCALIZED("out of bounds")); } - - SMDS_MeshElement* elem = (SMDS_MeshElement*) (ME); - elem->setShapeId(myIndex); - elem->setIdInShape(myElements.size()); - myElements.push_back(ME); + if (ME != myElements[idInSubShape]) + { + throw SALOME_Exception(LOCALIZED("not the same element")); + } + return; + } } + + SMDS_MeshElement* elem = (SMDS_MeshElement*) (ME); + elem->setShapeId(myIndex); + elem->setIdInShape(myElements.size()); + myElements.push_back(ME); + } } //======================================================================= //function : RemoveElement -//purpose : +//purpose : //======================================================================= bool SMESHDS_SubMesh::RemoveElement(const SMDS_MeshElement * ME, bool isElemDeleted) @@ -183,7 +174,7 @@ void SMESHDS_SubMesh::AddNode(const SMDS_MeshNode * N) //======================================================================= //function : RemoveNode -//purpose : +//purpose : //======================================================================= bool SMESHDS_SubMesh::RemoveNode(const SMDS_MeshNode * N, bool isNodeDeleted) @@ -385,29 +376,52 @@ bool SMESHDS_SubMesh::Contains(const SMDS_MeshElement * ME) const if (!ME) return false; - if (IsComplexSubmesh()) - { - set::const_iterator aSubIt = mySubMeshes.begin(); - for (; aSubIt != mySubMeshes.end(); aSubIt++) - if ((*aSubIt)->Contains(ME)) - return true; - return false; - } + if ( IsComplexSubmesh() ) + { + set::const_iterator aSubIt = mySubMeshes.begin(); + for (; aSubIt != mySubMeshes.end(); aSubIt++) + if ((*aSubIt)->Contains(ME)) + return true; + return false; + } if (ME->GetType() == SMDSAbs_Node) - { - int idInShape = ME->getIdInShape(); - if ((idInShape >= 0) && (idInShape < myNodes.size())) - if (myNodes[idInShape] == ME) - return true; - } + { + int idInShape = ME->getIdInShape(); + if ((idInShape >= 0) && (idInShape < myNodes.size())) + if (myNodes[idInShape] == ME) + return true; + } else - { - int idInShape = ME->getIdInShape(); - if ((idInShape >= 0) && (idInShape < myElements.size())) - if (myElements[idInShape] == ME) - return true; - } + { + int idInShape = ME->getIdInShape(); + if ((idInShape >= 0) && (idInShape < myElements.size())) + if (myElements[idInShape] == ME) + return true; + } + return false; +} + +//======================================================================= +//function : IsQuadratic +//purpose : Return true if my 1st element is quadratic +//======================================================================= + +bool SMESHDS_SubMesh::IsQuadratic() const +{ + if ( IsComplexSubmesh() ) + { + set::const_iterator aSubIt = mySubMeshes.begin(); + for (; aSubIt != mySubMeshes.end(); aSubIt++) + if ((*aSubIt)->IsQuadratic()) + return true; + return false; + } + + for ( size_t i = 0; i < myElements.size(); ++i ) + if ( myElements[i] ) + return myElements[i]->IsQuadratic(); + return false; } diff --git a/src/SMESHDS/SMESHDS_SubMesh.hxx b/src/SMESHDS/SMESHDS_SubMesh.hxx index 3460b8cdb..c70857c60 100644 --- a/src/SMESHDS/SMESHDS_SubMesh.hxx +++ b/src/SMESHDS/SMESHDS_SubMesh.hxx @@ -67,19 +67,20 @@ class SMESHDS_EXPORT SMESHDS_SubMesh virtual int NbNodes() const; virtual SMDS_NodeIteratorPtr GetNodes() const; virtual bool Contains(const SMDS_MeshElement * ME) const; // check if elem or node is in + virtual bool IsQuadratic() const; // clear the contents virtual void Clear(); - int getSize(); + int getSize(); void compactList(); SMESHDS_Mesh* GetParent() const { return const_cast< SMESHDS_Mesh*>( myParent ); } int GetID() const { return myIndex; } private: - SMESHDS_Mesh * myParent; + SMESHDS_Mesh * myParent; std::vector myElements; - std::vector myNodes; + std::vector myNodes; int myUnusedIdNodes; int myUnusedIdElements; diff --git a/src/SMESH_SWIG/smesh_algorithm.py b/src/SMESH_SWIG/smesh_algorithm.py index df027244b..9481ff1d7 100644 --- a/src/SMESH_SWIG/smesh_algorithm.py +++ b/src/SMESH_SWIG/smesh_algorithm.py @@ -287,8 +287,11 @@ class Mesh_Algorithm: if not "ViscousLayers" in self.GetCompatibleHypothesis(): raise TypeError, "ViscousLayers are not supported by %s"%self.algo.GetName() if faces and isinstance( faces[0], geomBuilder.GEOM._objref_GEOM_Object ): - import GEOM - faceIDs = [self.mesh.geompyD.GetSubShapeID(self.mesh.geom, f) for f in faces] + faceIDs = [] + for shape in faces: + ff = self.mesh.geompyD.SubShapeAll( shape, self.mesh.geompyD.ShapeType["FACE"] ) + for f in ff: + faceIDs.append( self.mesh.geompyD.GetSubShapeID(self.mesh.geom, f)) faces = faceIDs hyp = self.Hypothesis("ViscousLayers", [thickness, numberOfLayers, stretchFactor, faces, isFacesToIgnore], @@ -320,7 +323,12 @@ class Mesh_Algorithm: if not "ViscousLayers2D" in self.GetCompatibleHypothesis(): raise TypeError, "ViscousLayers2D are not supported by %s"%self.algo.GetName() if edges and isinstance( edges[0], geomBuilder.GEOM._objref_GEOM_Object ): - edges = [ self.mesh.geompyD.GetSubShapeID(self.mesh.geom, f) for f in edges ] + edgeIDs = [] + for shape in edges: + ee = self.mesh.geompyD.SubShapeAll( shape, self.mesh.geompyD.ShapeType["EDGE"]) + for e in ee: + edgeIDs.append( self.mesh.geompyD.GetSubShapeID( self.mesh.geom, e )) + edges = edgeIDs hyp = self.Hypothesis("ViscousLayers2D", [thickness, numberOfLayers, stretchFactor, edges, isEdgesToIgnore], toAdd=False) diff --git a/src/StdMeshers/StdMeshers_FaceSide.cxx b/src/StdMeshers/StdMeshers_FaceSide.cxx index 377a79c5d..d1d20245d 100644 --- a/src/StdMeshers/StdMeshers_FaceSide.cxx +++ b/src/StdMeshers/StdMeshers_FaceSide.cxx @@ -311,7 +311,9 @@ const vector& StdMeshers_FaceSide::GetUVPtStruct(bool isXConst, StdMeshers_FaceSide* me = const_cast< StdMeshers_FaceSide* >( this ); SMESHDS_Mesh* meshDS = myProxyMesh->GetMeshDS(); - SMESH_MesherHelper helper( *myProxyMesh->GetMesh() ); + SMESH_MesherHelper eHelper( *myProxyMesh->GetMesh() ); + SMESH_MesherHelper fHelper( *myProxyMesh->GetMesh() ); + fHelper.SetSubShape( myFace ); bool paramOK; double eps = 1e-100; @@ -346,7 +348,8 @@ const vector& StdMeshers_FaceSide::GetUVPtStruct(bool isXConst, const double prevNormPar = ( iE == 0 ? 0 : myNormPar[ iE-1 ]); // normalized param if ( node ) // nodes on internal vertices may be missing { - if ( vertexNodes.insert( node ).second ) + if ( vertexNodes.insert( node ).second || + fHelper.IsRealSeam( node->getshapeId() )) u2node.insert( u2node.end(), make_pair( prevNormPar, node )); } else if ( iE == 0 ) @@ -373,12 +376,12 @@ const vector& StdMeshers_FaceSide::GetUVPtStruct(bool isXConst, u2nodeVec.clear(); double paramSize = myLast[iE] - myFirst[iE]; double r = myNormPar[iE] - prevNormPar; - helper.SetSubShape( myEdge[iE] ); - helper.ToFixNodeParameters( true ); + eHelper.SetSubShape( myEdge[iE] ); + eHelper.ToFixNodeParameters( true ); if ( !myIsUniform[iE] ) for ( size_t i = 0; i < nodes.size(); ++i ) { - double u = helper.GetNodeU( myEdge[iE], nodes[i], 0, ¶mOK ); + double u = eHelper.GetNodeU( myEdge[iE], nodes[i], 0, ¶mOK ); double aLenU = GCPnts_AbscissaPoint::Length( me->myC3dAdaptor[iE], myFirst[iE], u ); if ( myEdgeLength[iE] < aLenU ) // nonregression test "3D_mesh_NETGEN/G6" { @@ -391,7 +394,7 @@ const vector& StdMeshers_FaceSide::GetUVPtStruct(bool isXConst, if ( u2nodeVec.empty() ) for ( size_t i = 0; i < nodes.size(); ++i ) { - double u = helper.GetNodeU( myEdge[iE], nodes[i], 0, ¶mOK ); + double u = eHelper.GetNodeU( myEdge[iE], nodes[i], 0, ¶mOK ); // paramSize is signed so orientation is taken into account double normPar = prevNormPar + r * ( u - myFirst[iE] ) / paramSize; u2nodeVec.push_back( make_pair( normPar, nodes[i] )); @@ -401,10 +404,11 @@ const vector& StdMeshers_FaceSide::GetUVPtStruct(bool isXConst, } } // loop on myEdge's - if ( u2node.empty() ) return myPoints; - // Add 2nd VERTEX node for a last EDGE + if ( !proxySubMesh.back() ) { + if ( u2node.empty() ) return myPoints; + const SMDS_MeshNode* node; if ( IsClosed() ) node = u2node.begin()->second; @@ -576,7 +580,9 @@ std::vector StdMeshers_FaceSide::GetOrderedNodes(int theEd if ( NbEdges() == 0 ) return resultNodes; SMESHDS_Mesh* meshDS = myProxyMesh->GetMeshDS(); - SMESH_MesherHelper helper(*myProxyMesh->GetMesh()); + SMESH_MesherHelper eHelper( *myProxyMesh->GetMesh() ); + SMESH_MesherHelper fHelper( *myProxyMesh->GetMesh() ); + fHelper.SetSubShape( myFace ); bool paramOK = true; // Sort nodes of all edges putting them into a map @@ -606,7 +612,8 @@ std::vector StdMeshers_FaceSide::GetOrderedNodes(int theEd // Add 1st vertex node of a current EDGE const SMDS_MeshNode* node = VertexNode( iE ); if ( node ) { // nodes on internal vertices may be missing - if ( vertexNodes.insert( node ).second ) + if ( vertexNodes.insert( node ).second || + fHelper.IsRealSeam( node->getshapeId() )) u2node.insert( make_pair( prevNormPar, node )); } else if ( iE == 0 ) @@ -632,11 +639,11 @@ std::vector StdMeshers_FaceSide::GetOrderedNodes(int theEd { double paramSize = myLast[iE] - myFirst[iE]; double r = myNormPar[iE] - prevNormPar; - helper.SetSubShape( myEdge[iE] ); - helper.ToFixNodeParameters( true ); + eHelper.SetSubShape( myEdge[iE] ); + eHelper.ToFixNodeParameters( true ); for ( size_t i = 0; i < nodes.size(); ++i ) { - double u = helper.GetNodeU( myEdge[iE], nodes[i], 0, ¶mOK ); + double u = eHelper.GetNodeU( myEdge[iE], nodes[i], 0, ¶mOK ); // paramSize is signed so orientation is taken into account double normPar = prevNormPar + r * ( u - myFirst[iE] ) / paramSize; u2node.insert( u2node.end(), make_pair( normPar, nodes[i] )); @@ -707,9 +714,8 @@ bool StdMeshers_FaceSide::GetEdgeNodes(size_t i, if ( inlude1stVertex ) { - const SMDS_MeshNode* n0 = VertexNode( i ); - if ( !n0 ) return false; - nodes.push_back( n0 ); + if ( const SMDS_MeshNode* n0 = VertexNode( i )) + nodes.push_back( n0 ); } if ( sm && ( sm->NbElements() > 0 || sm->NbNodes() > 0 )) @@ -764,9 +770,8 @@ bool StdMeshers_FaceSide::GetEdgeNodes(size_t i, if ( inludeLastVertex ) { - const SMDS_MeshNode* n1 = VertexNode( i+1 ); - if ( !n1 ) return false; - nodes.push_back( n1 ); + if ( const SMDS_MeshNode* n1 = VertexNode( i+1 )) + nodes.push_back( n1 ); } return true; } @@ -943,27 +948,43 @@ int StdMeshers_FaceSide::NbPoints(const bool update) const me->myNbSegments = 0; me->myMissingVertexNodes = false; + vector nodes; for ( int i = 0; i < NbEdges(); ++i ) { - if ( const SMESHDS_SubMesh* sm = myProxyMesh->GetSubMesh( Edge(i) )) { - int nbN = sm->NbNodes(); - if ( sm->NbElements() > 0 ) { - nbN = sm->NbElements() - 1; // nodes can be moved to other shapes by MergeNodes() - if ( !myIgnoreMediumNodes && - sm->GetElements()->next()->IsQuadratic() ) - nbN += sm->NbElements(); + if ( const SMESHDS_SubMesh* sm = myProxyMesh->GetSubMesh( Edge(i) )) + { + if ( sm->NbNodes() == sm->NbElements() - 1 ) + { + me->myNbPonits += sm->NbNodes(); + if ( myIgnoreMediumNodes && sm->IsQuadratic() ) + me->myNbPonits -= sm->NbElements(); + } + else // nodes can be moved to other shapes by MergeNodes() + { + nodes.clear(); + GetEdgeNodes( i, nodes, /*v1=*/false, /*v2=*/false ); + me->myNbPonits += nodes.size(); } - me->myNbPonits += nbN; me->myNbSegments += sm->NbElements(); } } + SMESH_MesherHelper helper( *myProxyMesh->GetMesh() ); + helper.SetSubShape( myFace ); + std::set< const SMDS_MeshNode* > vNodes; - for ( int i = 0; i <= NbEdges(); ++i ) + for ( int i = 0; i <= NbEdges(); ++i ) // nb VERTEXes is more than NbEdges() if !IsClosed() if ( const SMDS_MeshNode* n = VertexNode( i )) - vNodes.insert( n ); + { + if ( !vNodes.insert( n ).second && + helper.IsRealSeam( n->getshapeId() ) && + i < NbEdges()) + me->myNbPonits++; + } else + { me->myMissingVertexNodes = true; + } me->myNbPonits += vNodes.size(); if ( IsClosed() ) diff --git a/src/StdMeshers/StdMeshers_Projection_2D.cxx b/src/StdMeshers/StdMeshers_Projection_2D.cxx index d038ded9f..87572c18f 100644 --- a/src/StdMeshers/StdMeshers_Projection_2D.cxx +++ b/src/StdMeshers/StdMeshers_Projection_2D.cxx @@ -513,18 +513,18 @@ namespace { if ( !tgtNodes.empty() ) { vector< const SMDS_MeshNode* >::iterator tn = tgtNodes.begin(); - if ( srcWire->Edge(iE).Orientation() == tgtWire->Edge(iE).Orientation() ) + //if ( srcWire->Edge(iE).Orientation() == tgtWire->Edge(iE).Orientation() ) { vector< const SMDS_MeshNode* >::iterator sn = srcNodes.begin(); for ( ; tn != tgtNodes.end(); ++tn, ++sn) src2tgtNodes.insert( make_pair( *sn, *tn )); } - else - { - vector< const SMDS_MeshNode* >::reverse_iterator sn = srcNodes.rbegin(); - for ( ; tn != tgtNodes.end(); ++tn, ++sn) - src2tgtNodes.insert( make_pair( *sn, *tn )); - } + // else + // { + // vector< const SMDS_MeshNode* >::reverse_iterator sn = srcNodes.rbegin(); + // for ( ; tn != tgtNodes.end(); ++tn, ++sn) + // src2tgtNodes.insert( make_pair( *sn, *tn )); + // } is1DComputed = true; } } diff --git a/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx b/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx index 30c91c4cd..c173428be 100644 --- a/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx +++ b/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx @@ -4276,9 +4276,12 @@ int StdMeshers_Quadrangle_2D::getCorners(const TopoDS_Face& theFace, return error(COMPERR_BAD_SHAPE, TComm("Face must have 4 sides but not ") << faceSide.NbEdges() ); - const int nbSegments = Max( faceSide.NbPoints()-1, faceSide.NbSegments() ); - if ( nbSegments < nbCorners ) - return error(COMPERR_BAD_INPUT_MESH, TComm("Too few boundary nodes: ") << nbSegments); + if ( theConsiderMesh ) + { + const int nbSegments = Max( faceSide.NbPoints()-1, faceSide.NbSegments() ); + if ( nbSegments < nbCorners ) + return error(COMPERR_BAD_INPUT_MESH, TComm("Too few boundary nodes: ") << nbSegments); + } if ( nbCorners == 3 ) { -- 2.30.2